integrating KSZ8795 on imx8mplus

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

integrating KSZ8795 on imx8mplus

跳至解决方案
385 次查看
sanum19
Contributor III

This is how I changed the device tree:

&eqos { //no-change-(for a qualcomm based eth chip)
pinctrl-names = "default"; //eth1
pinctrl-0 = <&pinctrl_eqos>;
phy-mode = "rgmii-id";
phy-handle = <&ethphy0>;
status = "okay";

mdio {
compatible = "snps,dwmac-mdio";
#address-cells = <1>;
#size-cells = <0>;

ethphy0: ethernet-phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <0>;
reset-assert-us = <10000>;
reset-gpios = <&gpio4 22 GPIO_ACTIVE_LOW>;
reset-deassert-us = <30000>;
eee-broken-1000t;
at803x,vddio-1p8v;
at803x,vddio-disable;
};
};
};

&fec { //linked to ksz8795
pinctrl-names = "default"; //eth0
pinctrl-0 = <&pinctrl_fec>;
phy-mode = "rgmii-id";
fsl,magic-packet;

status = "okay";

fixed-link {
speed = <1000>;
full-duplex;
};

};
-----------------------------------------------------------------------------------------

&ecspi2 {
#address-cells = <1>;
#size-cells = <0>;
fsl,spi-num-chipselects = <3>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_ecspi2_cs>;
cs-gpios = <&gpio5 13 GPIO_ACTIVE_LOW>, /*SS0*/
<&gpio4 4 GPIO_ACTIVE_LOW>, /*SS1*/
<&gpio4 5 GPIO_ACTIVE_LOW>; /*SS2*/
clocks = <&clk IMX8MP_CLK_ECSPI2_ROOT>,
<&clk IMX8MP_CLK_ECSPI2_ROOT>;
clock-names = "ipg", "per";

status = "okay";

ksz8795: switch@0 {
reg = <0>;
compatible = "microchip,ksz8795";
spi-max-frequency = <5000000>;
pinctrl-names = "default";
/* spi-cpha;
spi-cpol; */
status = "okay";

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

port@0 {
reg = <0>;
label = "lan1";
phy-mode = "rgmii-id";
fixed-link {
speed = <100>;
full-duplex;
};
};

port@1 {
reg = <1>;
label = "lan2";
phy-mode = "rgmii-id";
fixed-link {
speed = <100>;
full-duplex;
};
};

port@2 {
reg = <2>;
label = "lan3";
phy-mode = "rgmii-id";
fixed-link {
speed = <100>;
full-duplex;
};
};


port@4 {
reg = <3>;
label = "cpu";
phy-mode = "rgmii-id";
ethernet = <&fec>;
fixed-link {
speed = <1000>;
full-duplex;
};

};
};

};

spidev1: spi@1 {
reg = <1>;
compatible = "rohm,dh2228fv";
spi-max-frequency = <500000>;
};

spidev2: spi@2 {
reg = <2>;
compatible = "rohm,dh2228fv";
spi-max-frequency = <500000>;
};
};

----------------------------------------------------------------------------

 

The board is booted and i loads the module: ksz_common, ksz8795 and ksz8795_spi

I can see the respective nodes formed.

# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1501
inet6 fe80::8bd8:a721:8c85:3a61 prefixlen 64 scopeid 0x20<link>
ether 38:d5:47:00:2e:9d txqueuelen 1000 (Ethernet)
RX packets 42 bytes 3094 (3.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 73 bytes 12753 (12.7 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eth1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 38:d5:47:00:2e:9e txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 52

lan1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::f4f3:314b:f7c3:9bd5 prefixlen 64 scopeid 0x20<link>
ether 38:d5:47:00:2e:9d txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14 bytes 2434 (2.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lan2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::1bd1:9463:93c0:732c prefixlen 64 scopeid 0x20<link>
ether 38:d5:47:00:2e:9d txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14 bytes 2434 (2.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lan3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::833e:9b97:6b1e:82ae prefixlen 64 scopeid 0x20<link>
ether 38:d5:47:00:2e:9d txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14 bytes 2434 (2.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0


-----------------------------------------------------------------------------------------------------------------------------
I can also see an error from the spi-driver

from dmesg log:
DBUG: KSZ_common:ksz_switch_register: of_get_phy_mode returned -22
[ 57.561350] DBUG: KSZ_common:ksz_switch_register: Retrieved PHY mode 0
[ 57.561353] DBUG: KSZ_common:ksz_switch_register: Failed to retrieve PHY mode, error -22

 

from ksz_common.c:
if (dev->dev->of_node) {
printk("DBUG: KSZ_common:ksz_switch_register: Device tree node found, retrieving PHY mode\n");
ret = of_get_phy_mode(dev->dev->of_node, &interface);
if (ret == 0) {
dev->compat_interface = interface;
printk("DBUG: KSZ_common:ksz_switch_register: Retrieved PHY mode %d\n", interface);
} else {
printk("DBUG: KSZ_common:ksz_switch_register: Failed to retrieve PHY mode, error %d\n", ret);
}
PRINT was added by me to debug-this is the only "error msg" i see from driver. But the driver loads successsfully
Regarding phy-mode: There are other prints after above error :
[ 57.576542] CLSU:KSZ8795: Configuring addr 0x87, bits 0x8, set 1
[ 57.576597] CLSU:KSZ8795: Configuring port 4, offset 0x0, bits 0x40, set 0
[ 57.576631] CLSU:KSZ8795: Configuring port 4, offset 0x2, bits 0x80, set 0
[ 57.576665] CLSU:KSZ8795: Configuring port 4, offset 0x0, bits 0x20, set 1
[ 57.576717] CLSU:KSZ8795: Configuring CPU port
[ 57.576750] CLSU:KSZ8795: Setting RGMII mode

So i suppose the phy-mode is being set to rgmii

----------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
ISSUE : I connected an ethernet cable between my pc and the board to check the comm ,Set a static ip for eth0 on board. i can see a link is established b/w them . But i cannot ping each other. Data packets are not seem to be receiving at both ends.(Validated that hardware is working fine)

from device to pc
# ping 192.168.1.50
PING 192.168.1.50 (192.168.1.50) 56(84) bytes of data.
From 192.168.1.30 icmp_seq=1 Destination Host Unreachable

Since link is being establish and ping is not happening i suspect - it must be some configuration issue. Either in the device tree or in the Register Writes.
Please help me to troubleshoot the issue.

0 项奖励
回复
1 解答
121 次查看
sanum19
Contributor III

It worked. The issue was that the driver I used was not updated. It was a 5 port switch. And the fifth port was not registering as it does (N-1) check on the ports. with tot no. of ports set to N=5. Adjusting the value slightly solved the issue.

在原帖中查看解决方案

0 项奖励
回复
3 回复数
122 次查看
sanum19
Contributor III

It worked. The issue was that the driver I used was not updated. It was a 5 port switch. And the fifth port was not registering as it does (N-1) check on the ports. with tot no. of ports set to N=5. Adjusting the value slightly solved the issue.

0 项奖励
回复
310 次查看
Zhiming_Liu
NXP TechSupport
NXP TechSupport

Hi

You can refer other dts to set switch node.

switch: switch@5f {
		compatible = "microchip,ksz9897";
		reg = <0x5f>;
		pinctrl-0 = <&pinctrl_ksz>;
		interrupt-parent = <&gpio4>;
		interrupts = <18 IRQ_TYPE_EDGE_FALLING>;
		phy-mode = "rgmii-id";

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

			lan1: port@0 {
				reg = <0>;
				label = "lan1";
				phy-mode = "internal";
				local-mac-address = [00 00 00 00 00 00];
			};

			lan2: port@1 {
				reg = <1>;
				label = "lan2";
				phy-mode = "internal";
				local-mac-address = [00 00 00 00 00 00];
			};

			lan3: port@2 {
				reg = <2>;
				label = "lan3";
				phy-mode = "internal";
				local-mac-address = [00 00 00 00 00 00];
			};

			lan4: port@3 {
				reg = <3>;
				label = "lan4";
				phy-mode = "internal";
				local-mac-address = [00 00 00 00 00 00];
			};

			port@5 {
				reg = <5>;
				label = "cpu";
				ethernet = <&fec1>;
				phy-mode = "rgmii-id";

				fixed-link {
					speed = <1000>;
					full-duplex;
				};
			};



Best Regards
Zhiming

0 项奖励
回复
371 次查看
sanum19
Contributor III

kernel is 5.10

0 项奖励
回复