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.

AM3352: Sitara AM335x changing the PHY from SMSC LAN8710 to TI DP83825I

Part Number: AM3352
Other Parts Discussed in Thread: DP83825I,

Tool/software:

Introduction

We are trying to cost optimize our current board design, based on bbb black which has SMSC LAN8710/LAN8720. We want to replace it with TI DP83825I PHY.
We have issue that in UBoot with the new design we can establish link over the PHY but in Linux this is not the case. In UBoot eth works and the moment that linux driver is loaded there is no more link towards the network.

Schematic

Phy is connected over MDIO and RMII to am3352 processor and pinmux is set as it should be:
Then linux/uboot device tree is updated with this pinmux:

 myrmii1_pins_default: myrmii1-default-pins {
   pinctrl-single,pins = <
     AM33XX_IOPAD(0x90c, PIN_INPUT_PULLUP   | MUX_MODE1) /* (H17) gmii1_crs.rmii1_crs_dv */
     AM33XX_IOPAD(0x910, PIN_INPUT_PULLUP | MUX_MODE1) /* (J15) gmii1_rxer.rmii1_rxer */
     AM33XX_IOPAD(0x914, PIN_OUTPUT | MUX_MODE1) /* (J16) gmii1_txen.rmii1_txen */
     AM33XX_IOPAD(0x928, PIN_OUTPUT | MUX_MODE1) /* (K17) gmii1_txd0.rmii1_txd0 */
     AM33XX_IOPAD(0x924, PIN_OUTPUT | MUX_MODE1) /* (K16) gmii1_txd1.rmii1_txd1 */
     AM33XX_IOPAD(0x940, PIN_INPUT_PULLUP | MUX_MODE1) /* (M16) gmii1_rxd0.rmii1_rxd0 */
     AM33XX_IOPAD(0x93c, PIN_INPUT_PULLUP | MUX_MODE1) /* (L15) gmii1_rxd1.rmii1_rxd1 */
     AM33XX_IOPAD(0x944, PIN_INPUT | MUX_MODE0) /* (H18) rmii1_refclk.rmii1_refclk */
   >;
 };

 /* Optional sleep pin settings. Must manually enter values in the below skeleton. */
 myrmii1_pins_sleep: myrmii1-sleep-pins {
   pinctrl-single,pins = <
     AM33XX_IOPAD(0x90c, PIN_INPUT_PULLUP   | MUX_MODE7) /* (H17) gmii1_crs.rmii1_crs_dv */
     AM33XX_IOPAD(0x910, PIN_INPUT_PULLUP | MUX_MODE7) /* (J15) gmii1_rxer.rmii1_rxer */
     AM33XX_IOPAD(0x914, PIN_OUTPUT | MUX_MODE7) /* (J16) gmii1_txen.rmii1_txen */
     AM33XX_IOPAD(0x928, PIN_OUTPUT | MUX_MODE7) /* (K17) gmii1_txd0.rmii1_txd0 */
     AM33XX_IOPAD(0x924, PIN_OUTPUT | MUX_MODE7) /* (K16) gmii1_txd1.rmii1_txd1 */
     AM33XX_IOPAD(0x940, PIN_INPUT_PULLUP | MUX_MODE7) /* (M16) gmii1_rxd0.rmii1_rxd0 */
     AM33XX_IOPAD(0x93c, PIN_INPUT_PULLUP | MUX_MODE7) /* (L15) gmii1_rxd1.rmii1_rxd1 */
     AM33XX_IOPAD(0x944, PIN_INPUT | MUX_MODE7) /* (H18) rmii1_refclk.rmii1_refclk */
   >;
 };

 mymdio1_pins_default: mymdio1-default-pins {
   pinctrl-single,pins = <
     AM33XX_IOPAD(0x94c, PIN_OUTPUT | MUX_MODE0) /* (M18) mdio_clk.mdio_clk */
     AM33XX_IOPAD(0x948, PIN_INPUT | MUX_MODE0) /* (M17) mdio_data.mdio_data */
   >;
 };

 /* Optional sleep pin settings. Must manually enter values in the skeleton below. */
 mymdio1_pins_sleep: mymdio1-sleep-pins {
   pinctrl-single,pins = <
     AM33XX_IOPAD(0x94c, 0) /* (M18) mdio_clk.mdio_clk */
     AM33XX_IOPAD(0x948, 0) /* (M17) mdio_data.mdio_data */
   >;
 };

And device tree is updated to use this pinmux and also to configure cpws emac0 to use this new phy over MDIO:
&cpsw_emac0 {
 phy-handle = <&ethphy0>;
 phy-mode = "rmii";
 ti,davinci-rmii-en = <1>;
};

&mac {
 slaves = <1>;
 pinctrl-names = "default", "sleep";
 pinctrl-0 = <&myrmii1_pins_default>;
 pinctrl-1 = <&myrmii1_pins_sleep>;
 status = "okay";
};

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

 ethphy0: ethernet-phy@0 {
   reg = <0>;
   ti,rmii-mode = "slave";
 };
};
DP83825I works in slave mode and MAC is providing clock of 50MHz.
In UBoot that clock is there all the time, in Linux on loading of the driver clock is there for 1-2 seconds and then it is gone. My guess is that since there is no link detected in Linux it will drop.
Kernel version: Linux renson-ed3-sdcard 5.10.162-renson-1 #5 Wed Oct 9 17:16:13 CEST 2024 armv7l GNU/Linux
dmesg:
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 5.10.162-renson-1 (vscode@RENSON-PCBTKABV.renson.be) (arm-renson-linux-gnueabihf-gcc.br_real (Buildroot 2024.02.3) 12.3.0, GNU ld (GNU Binutils) 2.40) #5 Wed Oct 9 17:16:13 CEST 2024
[    0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=50c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] OF: fdt: Machine model: TI AM335x Renson Endura Delta Custom
[    0.000000] Memory policy: Data cache writeback
[    0.000000] cma: Reserved 24 MiB at 0x9e000000
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000080000000-0x000000009fefffff]
[    0.000000]   HighMem  empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000080000000-0x000000009fefffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x000000009fefffff]
[    0.000000] CPU: All CPU(s) started in SVC mode.
[    0.000000] AM335X ES2.1 (neon)
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 129794
[    0.000000] Kernel command line: manufacturingnfsboot root=/dev/nfs nfsroot=172.27.3.18:/exports/flux ip=dhcp console=ttyS0,115200 mtdparts=omap2-nand.0:128k(SPL),128k(SPL.backup1),128k(SPL.backup2),128k(SPL.backup3),1920k(u-boot),128k()
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
[    0.000000] mem auto-init: stack:all(zero), heap alloc:off, heap free:off
[    0.000000] Memory: 484904K/523264K available (4096K kernel code, 273K rwdata, 2568K rodata, 1024K init, 424K bss, 13784K reserved, 24576K cma-reserved, 0K highmem)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000] IRQ: Found an INTC at 0x(ptrval) (revision 5.0) with 128 interrupts
[    0.000000] TI gptimer clocksource: always-on /ocp/interconnect@44c00000/segment@200000/target-module@31000
[    0.000023] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
[    0.000076] clocksource: dmtimer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[    0.001077] TI gptimer clockevent: 24000000 Hz at /ocp/interconnect@48000000/segment@0/target-module@40000
[    0.005286] Console: colour dummy device 80x30
[    0.005432] Calibrating delay loop... 297.98 BogoMIPS (lpj=595968)
[    0.041194] pid_max: default: 32768 minimum: 301
[    0.041953] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.042005] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.043590] CPU: Testing write buffer coherency: ok
[    0.043728] CPU0: Spectre v2: using BPIALL workaround
[    0.045239] Setting up static identity map for 0x80100000 - 0x80100054
[    0.046632] devtmpfs: initialized
[    0.090576] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
[    0.091021] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.091083] futex hash table entries: 256 (order: -1, 3072 bytes, linear)
[    0.094552] pinctrl core: initialized pinctrl subsystem
[    0.098255] NET: Registered protocol family 16
[    0.104105] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.134232] l3-aon-clkctrl:0000:0: failed to disable
[    0.136961] thermal_sys: Registered thermal governor 'fair_share'
[    0.136985] thermal_sys: Registered thermal governor 'step_wise'
[    6.499433] iommu: Default domain type: Translated 
[    6.503211] SCSI subsystem initialized
[    6.503955] usbcore: registered new interface driver usbfs
[    6.504112] usbcore: registered new interface driver hub
[    6.504254] usbcore: registered new device driver usb
[    6.510529] clocksource: Switched to clocksource dmtimer
[    6.533973] NET: Registered protocol family 2
[    6.534695] IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear)
[    6.536495] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
[    6.536595] TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear)
[    6.536733] TCP bind hash table entries: 4096 (order: 2, 16384 bytes, linear)
[    6.536859] TCP: Hash tables configured (established 4096 bind 4096)
[    6.537100] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
[    6.537166] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
[    6.537488] NET: Registered protocol family 1
[    6.538777] RPC: Registered named UNIX socket transport module.
[    6.538815] RPC: Registered udp transport module.
[    6.538839] RPC: Registered tcp transport module.
[    6.538862] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    6.545829] Initialise system trusted keyrings
[    6.546295] workingset: timestamp_bits=30 max_order=17 bucket_order=0
[    6.555768] zbud: loaded
[    6.560161] ntfs: driver 2.1.32 [Flags: R/W].
[    6.560866] Key type asymmetric registered
[    6.560902] Asymmetric key parser 'x509' registered
[    6.561026] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 250)
[    6.561058] io scheduler mq-deadline registered
[    6.561085] io scheduler kyber registered
[    8.026897] ti-sysc: probe of 44e31000.target-module failed with error -16
[    8.317449] ti-sysc: probe of 48040000.target-module failed with error -16
[    8.830782] omap-mailbox 480c8000.mailbox: omap mailbox rev 0x400
[    9.591381] debugfs: Directory '49000000.dma' with parent 'dmaengine' already present!
[    9.591454] edma 49000000.dma: TI EDMA DMA engine driver
[    9.627410] pinctrl-single 44e10800.pinmux: 142 pins, size 568
[    9.633259] pwm-tiehrpwm: Polarity Not Inversed
[    9.634169] pwm-tiehrpwm: Polarity Not Inversed
[    9.635111] pwm-tiehrpwm: Polarity Not Inversed
[    9.666367] Serial: 8250/16550 driver, 6 ports, IRQ sharing disabled
[    9.673362] printk: console [ttyS0] disabled
[    9.673608] 44e09000.serial: ttyS0 at MMIO 0x44e09000 (irq = 21, base_baud = 3000000) is a 8250
[   10.230457] printk: console [ttyS0] enabled
[   10.237195] 48022000.serial: ttyS1 at MMIO 0x48022000 (irq = 28, base_baud = 3000000) is a 8250
[   10.248269] omap8250 48024000.serial: unable to register 8250 port
[   10.256024] 481aa000.serial: ttyS5 at MMIO 0x481aa000 (irq = 41, base_baud = 3000000) is a 8250
[   10.273548] omap_rng 48310000.rng: Random Number Generator ver. 20
[   10.289959] mtdoops: mtd device (mtddev=name/number) must be supplied
[   10.301933] random: crng init done
[   10.354624] davinci_mdio 4a101000.mdio: davinci mdio revision 1.6, bus freq 1000000
[   10.365116] davinci_mdio 4a101000.mdio: phy[0]: device 4a101000.mdio:00, driver TI DP83825S
[   10.374489] cpsw 4a100000.ethernet: initialized cpsw ale version 1.4
[   10.380981] cpsw 4a100000.ethernet: ALE Table size 1024
[   10.386663] cpsw 4a100000.ethernet: Detected MACID = b8:94:d9:0e:8e:36
[   10.396576] usbcore: registered new interface driver r8152
[   10.402326] usbcore: registered new interface driver asix
[   10.407944] usbcore: registered new interface driver ax88179_178a
[   10.414225] usbcore: registered new interface driver cdc_ether
[   10.420294] usbcore: registered new interface driver smsc95xx
[   10.426231] usbcore: registered new interface driver net1080
[   10.432077] usbcore: registered new interface driver cdc_subset
[   10.438177] usbcore: registered new interface driver zaurus
[   10.443991] usbcore: registered new interface driver cdc_ncm
[   10.453289] am335x-phy-driver 47401300.usb-phy: supply vcc not found, using dummy regulator
[   10.462332] am335x-phy-driver 47401300.usb-phy: dummy supplies not allowed for exclusive requests
[   10.473000] am335x-phy-driver 47401b00.usb-phy: supply vcc not found, using dummy regulator
[   10.481938] am335x-phy-driver 47401b00.usb-phy: dummy supplies not allowed for exclusive requests
[   10.491617] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[   10.498292] ehci-platform: EHCI generic platform driver
[   10.504863] ehci-omap: OMAP-EHCI Host Controller driver
[   10.510850] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[   10.517170] ohci-platform: OHCI generic platform driver
[   10.524350] usbcore: registered new interface driver uas
[   10.529965] usbcore: registered new interface driver usb-storage
[   10.536336] usbcore: registered new interface driver usbserial_generic
[   10.543035] usbserial: USB Serial support registered for generic
[   10.549218] usbcore: registered new interface driver ftdi_sio
[   10.555119] usbserial: USB Serial support registered for FTDI USB Serial Device
[   10.573764] musb-hdrc musb-hdrc.0: MUSB HDRC host driver
[   10.579268] musb-hdrc musb-hdrc.0: new USB bus registered, assigned bus number 1
[   10.587267] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.10
[   10.595657] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   10.602994] usb usb1: Product: MUSB HDRC host driver
[   10.608040] usb usb1: Manufacturer: Linux 5.10.162-renson-1 musb-hcd
[   10.614482] usb usb1: SerialNumber: musb-hdrc.0
[   10.620629] hub 1-0:1.0: USB hub found
[   10.624595] hub 1-0:1.0: 1 port detected
[   10.639474] musb-hdrc musb-hdrc.1: MUSB HDRC host driver
[   10.644981] musb-hdrc musb-hdrc.1: new USB bus registered, assigned bus number 2
[   10.653280] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.10
[   10.661681] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   10.669002] usb usb2: Product: MUSB HDRC host driver
[   10.674069] usb usb2: Manufacturer: Linux 5.10.162-renson-1 musb-hcd
[   10.680514] usb usb2: SerialNumber: musb-hdrc.1
[   10.686733] hub 2-0:1.0: USB hub found
[   10.690687] hub 2-0:1.0: 1 port detected
[   10.698735] omap_rtc 44e3e000.rtc: already running
[   10.705143] omap_rtc 44e3e000.rtc: registered as rtc0
[   10.710438] omap_rtc 44e3e000.rtc: setting system clock to 2000-01-02T01:07:48 UTC (946775268)
[   10.720270] i2c /dev entries driver
[   10.728746] omap_wdt: OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
[   10.741240] sdhci: Secure Digital Host Controller Interface driver
[   10.747595] sdhci: Copyright(c) Pierre Ossman
[   10.754293] sdhci-pltfm: SDHCI platform and OF driver helper
[   10.763627] ledtrig-cpu: registered to indicate activity on CPUs
[   10.774207] hid: raw HID events driver (C) Jiri Kosina
[   10.780897] sdhci-omap 48060000.mmc: supply vqmmc not found, using dummy regulator
[   10.822082] usbcore: registered new interface driver usbhid
[   10.827781] usbhid: USB HID core driver
[   10.838079] NET: Registered protocol family 17
[   10.842707] lib80211: common routines for IEEE802.11 drivers
[   10.848955] ThumbEE CPU extension supported.
[   10.853320] Registering SWP/SWPB emulation handler
[   10.858193] omap_voltage_late_init: Voltage driver support not added
[   10.865335] Loading compiled-in X.509 certificates
[   10.870679] mmc0: SDHCI controller on 48060000.mmc [48060000.mmc] using External DMA
[   10.910262] omap-gpmc 50000000.gpmc: GPMC revision 6.0
[   10.915581] gpmc_mem_init: disabling cs 0 mapped at 0x0-0x1000000
[   10.926800] nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xdc
[   10.933286] nand: Micron MT29F4G08ABADAWP
[   10.937376] nand: 512 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
[   10.945047] omap2-nand 8000000.nand: using prefetch polled xfer mode
[   10.951639] nand: using OMAP_ECC_BCH8_CODE_HW ECC scheme
[   10.957176] 9 cmdlinepart partitions found on MTD device omap2-nand.0
[   10.963713] Creating 9 MTD partitions on "omap2-nand.0":
[   10.969116] 0x000000000000-0x000000020000 : "SPL"
[   10.978993] 0x000000020000-0x000000040000 : "SPL.backup1"
[   10.989054] 0x000000040000-0x000000060000 : "SPL.backup2"
[   10.998600] 0x000000060000-0x000000080000 : "SPL.backup3"
[   11.008528] 0x000000080000-0x000000260000 : "u-boot"
[   11.019435] 0x000000260000-0x000000280000 : "u-boot-env"
[   11.025199] mmc0: new high speed SDHC card at address 5048
[   11.035887] mmcblk0: mmc0:5048 SD32G 28.9 GiB 
[   11.041143] 0x000000280000-0x000008280000 : "rootfs"
[   11.055925]  mmcblk0: p1 p2
[   11.131433] 0x000008280000-0x000010280000 : "rootfs-next"
[   11.213510] 0x000010280000-0x000020000000 : "data"
[   11.369361] OMAP GPIO hardware version 0.1
[   11.399948] tps65218-pwrbutton: Failed to locate of_node [id: -2]
[   11.406715] tps65218-gpio: Failed to locate of_node [id: -2]
[   11.422990] omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz
[   11.431345] omap_i2c 4802a000.i2c: bus 1 rev0.11 at 400 kHz
[   11.454157] omap_reset_deassert: timedout waiting for gfx:0
[   11.459947] ti-sysc: probe of 5600fe00.target-module failed with error -110
[   11.468802] 48024000.serial: ttyS2 at MMIO 0x48024000 (irq = 29, base_baud = 3000000) is a 8250
[   11.483157] printk: console [netcon0] enabled
[   11.487629] netconsole: network logging started
[   11.497413] cpsw 4a100000.ethernet: initializing cpsw version 1.12 (0)
[   11.514777] TI DP83825S 4a101000.mdio:00: attached PHY driver [TI DP83825S] (mii_bus:phy_addr=4a101000.mdio:00, irq=POLL)
[   31.534657] Waiting up to 100 more seconds for network.
We are using buildroot to build our image and beagleboard/linux. If there is something missing I can provide more info. Like ethtool:
# ethtool eth0
Settings for eth0:
       Supported ports: [ TP MII ]
       Supported link modes:   10baseT/Half 10baseT/Full  
                               100baseT/Half 100baseT/Full  
       Supported pause frame use: Symmetric Receive-only
       Supports auto-negotiation: Yes
       Supported FEC modes: Not reported
       Advertised link modes:  10baseT/Half 10baseT/Full  
                               100baseT/Half 100baseT/Full  
       Advertised pause frame use: No
       Advertised auto-negotiation: Yes
       Advertised FEC modes: Not reported
       Speed: Unknown!
       Duplex: Unknown! (255)
       Port: Twisted Pair
       PHYAD: 0
       Transceiver: external
       Auto-negotiation: on
       MDI-X: Unknown
       Supports Wake-on: gs
       Wake-on: d
       SecureOn password: 00:00:00:00:00:00
       Current message level: 0x00000000 (0)
                               
       Link detected: no

# ethtool -S eth0
NIC statistics:
     Good Rx Frames: 0
     Broadcast Rx Frames: 0
     Multicast Rx Frames: 0
     Pause Rx Frames: 0
     Rx CRC Errors: 0
     Rx Align/Code Errors: 0
     Oversize Rx Frames: 0
     Rx Jabbers: 0
     Undersize (Short) Rx Frames: 0
     Rx Fragments: 0
     Rx Octets: 0
     Good Tx Frames: 0
     Broadcast Tx Frames: 0
     Multicast Tx Frames: 0
     Pause Tx Frames: 0
     Deferred Tx Frames: 0
     Collisions: 0
     Single Collision Tx Frames: 0
     Multiple Collision Tx Frames: 0
     Excessive Collisions: 0
     Late Collisions: 0
     Tx Underrun: 0
     Carrier Sense Errors: 0
     Tx Octets: 0
     Rx + Tx 64 Octet Frames: 0
     Rx + Tx 65-127 Octet Frames: 0
     Rx + Tx 128-255 Octet Frames: 0
     Rx + Tx 256-511 Octet Frames: 0
     Rx + Tx 512-1023 Octet Frames: 0
     Rx + Tx 1024-Up Octet Frames: 0
     Net Octets: 0
     Rx Start of Frame Overruns: 0
     Rx Middle of Frame Overruns: 0
     Rx DMA Overruns: 0
     Rx DMA chan 0: head_enqueue: 1
     Rx DMA chan 0: tail_enqueue: 127
     Rx DMA chan 0: pad_enqueue: 0
     Rx DMA chan 0: misqueued: 0
     Rx DMA chan 0: desc_alloc_fail: 0
     Rx DMA chan 0: pad_alloc_fail: 0
     Rx DMA chan 0: runt_receive_buf: 0
     Rx DMA chan 0: runt_transmit_bu: 0
     Rx DMA chan 0: empty_dequeue: 0
     Rx DMA chan 0: busy_dequeue: 0
     Rx DMA chan 0: good_dequeue: 0
     Rx DMA chan 0: requeue: 0
     Rx DMA chan 0: teardown_dequeue: 0
     Tx DMA chan 0: head_enqueue: 0
     Tx DMA chan 0: tail_enqueue: 0`
     Tx DMA chan 0: pad_enqueue: 0
     Tx DMA chan 0: misqueued: 0
     Tx DMA chan 0: desc_alloc_fail: 0
     Tx DMA chan 0: pad_alloc_fail: 0
     Tx DMA chan 0: runt_receive_buf: 0
     Tx DMA chan 0: runt_transmit_bu: 0
     Tx DMA chan 0: empty_dequeue: 0
     Tx DMA chan 0: busy_dequeue: 0
     Tx DMA chan 0: good_dequeue: 0
     Tx DMA chan 0: requeue: 0
     Tx DMA chan 0: teardown_dequeue: 0
UBOOT:
=> net list
eth2 : ethernet@4a100000 b8:94:d9:0e:8e:36 active
eth3 : usb_ether de:ad:be:ef:00:01  
=> mii info
PHY 0x00: OUI = 0x80028, Model = 0x14, Rev = 0x00, 100baseT, FDX
=> mii device
MII devices: 'ethernet@4a100000'  
Current device: 'ethernet@4a100000'
=> mdio list
ethernet@4a100000:
0 - TI DP83825S <--> ethernet@4a100000
=> mii read 0 0x10
0F15 
Link is up and 100Mb/s full duplex auto negotiation completed 
We can load from UBoot kernel from tftp 
More I look at this I have more questions :). Is it possible that in linux rmii clock for am3352 can be only the input? Is it possible that we have to provide external 25MHz or 50MHz depending on master/slave mode?
I tried in am3352 pinmux tool to configure rmii_ref_clk to be output, but that didn't change anything.
 
  • Hi,

    For RMII mode an external clock is required. I do not see the clock in the schematic snippet supplied. How is the 50MHz clock supplied?

    Best Regards,

    Schuyler

  • Oh, thanks for the answer.

    We do not have external clock we are trying to use am3352 internal RMII clock which is generated somehow in the UBoot (and there it works, we can boot then from tftp). In Linux, once the driver is loaded, RMII 50MHz clock is started for like 1 sec and then it stops.

    I guess if U set the mode in pinmux tool for RMII interface to mode0 and we set it like output it should generate the clock.

    	myrmii1_pins_default: myrmii1-default-pins {
    		pinctrl-single,pins = <
    			AM33XX_IOPAD(0x90c, PIN_INPUT | MUX_MODE1) /* (H17) gmii1_crs.rmii1_crs_dv */
    			AM33XX_IOPAD(0x910, PIN_INPUT | MUX_MODE1) /* (J15) gmii1_rxer.rmii1_rxer */
    			AM33XX_IOPAD(0x914, PIN_OUTPUT | MUX_MODE1) /* (J16) gmii1_txen.rmii1_txen */
    			AM33XX_IOPAD(0x928, PIN_OUTPUT | MUX_MODE1) /* (K17) gmii1_txd0.rmii1_txd0 */
    			AM33XX_IOPAD(0x924, PIN_OUTPUT | MUX_MODE1) /* (K16) gmii1_txd1.rmii1_txd1 */
    			AM33XX_IOPAD(0x940, PIN_INPUT | MUX_MODE1) /* (M16) gmii1_rxd0.rmii1_rxd0 */
    			AM33XX_IOPAD(0x93c, PIN_INPUT | MUX_MODE1) /* (L15) gmii1_rxd1.rmii1_rxd1 */
    			AM33XX_IOPAD(0x944, PIN_OUTPUT | MUX_MODE0) /* (H18) rmii1_refclk.rmii1_refclk */
    		>;
    	};

    U can see that rmii clock is set as the output and that mode is 0.

    Or I didn't understand this well? 

    In U boot pinmux is also set like that:

     static struct module_pin_mux rmii1_pin_mux[] = {
    -    {OFFSET(mii1_crs), MODE(1) | RXACTIVE},              /* MII1_CRS */
    -    {OFFSET(mii1_rxerr), MODE(1)  | RXACTIVE},           /* MII1_RXERR */
    -    {OFFSET(mii1_txen), MODE(1)},                        /* MII1_TXEN */
    -    {OFFSET(mii1_txd0), MODE(1)},                        /* MII1_TXD0 */
    -    {OFFSET(mii1_txd1), MODE(1)},                        /* MII1_TXD1 */
    -    {OFFSET(mii1_rxd0), MODE(1) | RXACTIVE},             /* MII1_RXD0 */
    -    {OFFSET(mii1_rxd1), MODE(1) | RXACTIVE},             /* MII1_RXD1 */
    -    {OFFSET(rmii1_refclk), MODE(0) | RXACTIVE},          /* RMII1_REFCLK */
    -    {OFFSET(mdio_clk), MODE(0) | PULLUP_EN},             /* MDIO_CLK */
    +    {OFFSET(mii1_crs), MODE(1) | PULLUP_EN | RXACTIVE},   /* MII1_CRS */
    +    {OFFSET(mii1_rxerr), MODE(1) | PULLUP_EN | RXACTIVE}, /* MII1_RXERR */
    +    {OFFSET(mii1_txen), MODE(1)},                         /* MII1_TXEN */
    +    {OFFSET(mii1_txd0), MODE(1)},                         /* MII1_TXD0 */
    +    {OFFSET(mii1_txd1), MODE(1)},                         /* MII1_TXD1 */
    +    {OFFSET(mii1_rxd0), MODE(1) | PULLUP_EN | RXACTIVE},  /* MII1_RXD0 */
    +    {OFFSET(mii1_rxd1), MODE(1) | PULLUP_EN | RXACTIVE},  /* MII1_RXD1 */
    +    {OFFSET(rmii1_refclk), MODE(0) | RXACTIVE},           /* RMII1_REFCLK */
    +    {OFFSET(mdio_clk), MODE(0) | PULLUP_EN},              /* MDIO_CLK */
    +    {OFFSET(mdio_data), MODE(0) | RXACTIVE},              /* MDIO_DATA */
         {-1},
     };

    As U can see in UBoot even I left the clock as RX and am3352 is still generating that clock.

    May I ask, is there something in Linux driver for CPSW that will do signal analysis of the rmii and will say ah no, we are not going to use this PHY without external clock?

  • Hi,

    My understanding is that due to the tight requirement of aligning the both TX and RX to the same clock the PHY needs to provide the clock not the AM335x. Let me discuss this point with a HW colleague.

    Did you previous design use RMII for the interface mode?

    Best Regards,

    Schuyler

  • Previous design was mii not rmii but it was with external clock. But we wanted to reduce the price of the total product by using TI phy, no external clock, and some other cost optimizations. But yeah, phy not working will not save cents Slight smile.