Swapped PHY and cannot connect to ethernet

Hello,

I wanted to upgrade to gigabit Ethernet and swapped out the Ethernet PHY to Texas Instrument DP83867IR
The board booted up fine and detects the PHY. But trying to communicate through the Ethernet as simple as pinging has no response.

I’m not quite sure if it’s a software or hardware problem.

Here’s my connection
EthernetPHY.jpg

Here are the dmesg logs, ifconfig, and ethtool on eth0

`
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.14.49-ti-r54 (root@b2-am57xx-beagle-x15-2gb) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)) #1 SMP PREEMPT Fri Jun 15 22:14:13 UTC 2018
[ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt: Machine model: TI AM335x BeagleBone Black
[ 0.000000] Memory policy: Data cache writeback
[ 0.000000] efi: Getting EFI parameters from FDT:
[ 0.000000] efi: UEFI not found.
[ 0.000000] cma: Reserved 48 MiB at 0x9c800000
[ 0.000000] On node 0 totalpages: 130560
[ 0.000000] free_area_init_node: node 0, pgdat c15ed380, node_mem_map df961000
[ 0.000000] Normal zone: 1148 pages used for memmap
[ 0.000000] Normal zone: 0 pages reserved
[ 0.000000] Normal zone: 130560 pages, LIFO batch:31
[ 0.000000] CPU: All CPU(s) started in SVC mode.
[ 0.000000] AM335X ES2.1 (sgx neon)
[ 0.000000] random: get_random_bytes called from start_kernel+0xac/0x460 with crng_init=0
[ 0.000000] percpu: Embedded 18 pages/cpu @df8ea000 s41548 r8192 d23988 u73728
[ 0.000000] pcpu-alloc: s41548 r8192 d23988 u73728 alloc=18*4096
[ 0.000000] pcpu-alloc: [0] 0
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 129412
[ 0.000000] Kernel command line: console=ttyO0,115200n8 bone_capemgr.uboot_capemgr_enabled=1 root=/dev/mmcblk0p1 ro rootfstype=ext4 rootwait coherent_pool=1M net.ifnames=0 quiet
[ 0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[ 0.000000] Memory: 440472K/522240K available (13312K kernel code, 1168K rwdata, 4372K rodata, 1024K init, 673K bss, 32616K reserved, 49152K cma-reserved, 0K highmem)
[ 0.000000] Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
vmalloc : 0xe0000000 - 0xff800000 ( 504 MB)
lowmem : 0xc0000000 - 0xdfe00000 ( 510 MB)
pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
.text : 0xc0008000 - 0xc0e00000 (14304 kB)
.init : 0xc1400000 - 0xc1500000 (1024 kB)
.data : 0xc1500000 - 0xc16241a8 (1169 kB)
.bss : 0xc162ec1c - 0xc16d709c ( 674 kB)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] ftrace: allocating 42794 entries in 126 pages
[ 0.000000] Preemptible hierarchical RCU implementation.
[ 0.000000] RCU restricting CPUs from NR_CPUS=2 to nr_cpu_ids=1.
[ 0.000000] Tasks RCU enabled.
[ 0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[ 0.000000] IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts
[ 0.000000] OMAP clockevent source: timer2 at 24000000 Hz
[ 0.000026] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
[ 0.000048] clocksource: timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[ 0.000059] OMAP clocksource: timer1 at 24000000 Hz
[ 0.002191] timer_probe: no matching timers found
[ 0.002535] Console: colour dummy device 80x30
[ 0.002564] WARNING: Your ‘console=ttyO0’ has been replaced by ‘ttyS0’
[ 0.002569] This ensures that you still see kernel messages. Please
[ 0.002573] update your kernel commandline.
[ 0.002601] Calibrating delay loop… 995.32 BogoMIPS (lpj=1990656)
[ 0.020622] pid_max: default: 32768 minimum: 301
[ 0.020893] Security Framework initialized
[ 0.020909] Yama: becoming mindful.
[ 0.020949] AppArmor: AppArmor disabled by boot time parameter
[ 0.021141] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.021154] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.022168] CPU: Testing write buffer coherency: ok
[ 0.022674] CPU0: thread -1, cpu 0, socket -1, mpidr 0
[ 0.036714] Setting up static identity map for 0x80100000 - 0x80100060
[ 0.044620] Hierarchical SRCU implementation.
[ 0.055741] EFI services will not be available.
[ 0.060629] smp: Bringing up secondary CPUs …
[ 0.060644] smp: Brought up 1 node, 1 CPU
[ 0.060655] SMP: Total of 1 processors activated (995.32 BogoMIPS).
[ 0.060662] CPU: All CPU(s) started in SVC mode.
[ 0.062247] devtmpfs: initialized
[ 0.096985] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
[ 0.097457] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.097485] futex hash table entries: 256 (order: 2, 16384 bytes)
[ 0.101423] xor: measuring software checksum speed
[ 0.140649] arm4regs : 1200.000 MB/sec
[ 0.180597] 8regs : 1075.000 MB/sec
[ 0.220595] 32regs : 988.000 MB/sec
[ 0.260595] neon : 1620.000 MB/sec
[ 0.260603] xor: using function: neon (1620.000 MB/sec)
[ 0.260622] pinctrl core: initialized pinctrl subsystem
[ 0.261430] DMI not present or invalid.
[ 0.261864] NET: Registered protocol family 16
[ 0.265748] DMA: preallocated 1024 KiB pool for atomic coherent allocations
[ 0.360575] omap_hwmod: debugss: _wait_target_disable failed
[ 0.401395] cpuidle: using governor menu
[ 0.416488] OMAP GPIO hardware version 0.1
[ 0.436298] No ATAGs?
[ 0.436320] hw-breakpoint: debug architecture 0x4 unsupported.
[ 0.438061] omap4_sram_init:Unable to allocate sram needed to handle errata I688
[ 0.438079] omap4_sram_init:Unable to get sram pool needed to handle errata I688
[ 0.532660] raid6: neonx2 gen() 1882 MB/s
[ 0.600626] raid6: neonx2 xor() 1497 MB/s
[ 0.600634] raid6: using algorithm neonx2 gen() 1882 MB/s
[ 0.600641] raid6: … xor() 1497 MB/s, rmw enabled
[ 0.600647] raid6: using neon recovery algorithm
[ 0.609470] edma 49000000.edma: TI EDMA DMA engine driver
[ 0.616386] SCSI subsystem initialized
[ 0.620764] libata version 3.00 loaded.
[ 0.621063] usbcore: registered new interface driver usbfs
[ 0.621120] usbcore: registered new interface driver hub
[ 0.621240] usbcore: registered new device driver usb
[ 0.622580] omap_i2c 44e0b000.i2c: could not find pctldev for node /ocp/l4_wkup@44c00000/scm@210000/pinmux@800/pinmux_i2c0_pins, deferring probe
[ 0.623567] omap_i2c 4802a000.i2c: bus 1 rev0.11 at 100 kHz
[ 0.625037] omap_i2c 4819c000.i2c: bus 2 rev0.11 at 100 kHz
[ 0.625327] media: Linux media interface: v0.10
[ 0.625391] Linux video capture interface: v2.00
[ 0.625564] pps_core: LinuxPPS API ver. 1 registered

I doubt just swapping the PHY will do it for you
The magnetics are for 100 base T not gig.
Probably more things as well

The magnetics was replaced as well. I used the PulseR

Hi Stephen,

DP83867IR is a tricky PHY to use due to its quasi state bootstrap pins. Each pin can have 4 states.

You will need to use strong pull up/down on the bootstrap pins to ensure that it latches a correct bootstrap at Power on reset.

Can you cross check if the bootstrap configuration is right by dumping the bootstrap configuration?

e.g.

diff --git a/drivers/net/phy/dp83867.c b/drivers/net/phy/dp83867.c
index c1ab976..ccfb0bf 100644
--- a/drivers/net/phy/dp83867.c
+++ b/drivers/net/phy/dp83867.c
@@ -218,6 +218,11 @@ static int dp83867_config_init(struct phy_device *phydev)
     dp83867 = (struct dp83867_private *)phydev->priv;
   }

+ val = phy_read_mmd(phydev, DP83867_DEVADDR, DP83867_STRAP_STS1);
+ dev_info(&phydev->mdio.dev, "STRAP_STS1 0x%x\n", val);
+ val = phy_read_mmd(phydev, DP83867_DEVADDR, DP83867_CFG4);
+ dev_info(&phydev->mdio.dev, "CFG4 0x%x\n", val);