I added some debug lines to try to see what is happening. I could not see
the dwxe clocks being turned on until I changed:
/* Enable clock. */
// clock_enable(faa->fa_node, "stmmaceth");
// reset_deassert(faa->fa_node, "stmmaceth");
clock_enable_all(faa->fa_node);
reset_deassert_all(faa->fa_node);
I could not find any reference to stmmaceth. I can now see one clock being
turned on:
#define H3_CLK_BUS_EMAC 27
[H3_CLK_BUS_EMAC] = { 0x0060, 17, H3_CLK_AHB2 },
But not the physical clock:
#define H3_CLK_BUS_EPHY 67
[H3_CLK_BUS_EPHY] = { 0x0070, 0 },
>From the boot log:
dwxe0 at simplebus0
if_dwxe phy-handle node: 0x588.
if_dwxe sc_phyloc: 0x1.
sxiccmu clock enable on: 1, reg: 0x60, bit: 17
sxiccmu clock reset assert: 0, reg: 0x2c0, bit: 17
: address 02:81:b1:07:76:5e
dwxe0: reset timeout
ukphy0 at dwxe0 phy 1: Generic IEEE 802.3u media interface, rev. 4: OUI
0x1e7240, model 0x0004
ifmedia_set: no match for 0x100/0xffffffffffffffff
I have cobbled together a dtb from an armbian distribution where the
ethernet works and the clocks match the entries in sxiccmu_clocks.h:
ethernet@1c30000 {
compatible = "allwinner,sun8i-h3-emac";
syscon = <0x49>;
reg = <0x1c30000 0x104>;
interrupts = <0x0 0x52 0x4>;
resets = <0x2 0xc 0x2 0x27>;
reset-names = "ahb";
clocks = <0x2 0x1b 0x2 0x43>;
clock-names = "ahb";
pinctrl-names = "default";
pinctrl-0 = <0x48>;
#address-cells = <0x1>;
#size-cells = <0x0>;
status = "okay";
phy-handle = <0x47>;
phy-mode = "mii";
allwinner,leds-active-low;
linux,phandle = <0x31>;
phandle = <0x31>;
mdio {
#address-cells = <0x1>;
#size-cells = <0x0>;
linux,phandle = <0x32>;
phandle = <0x32>;
ethernet-phy@1 {
reg = <0x1>;
clocks = <0x2 0x43>;
resets = <0x2 0x27>;
linux,phandle = <0x47>;
phandle = <0x47>;
};
};
};
From: Stephen Graf [mailto:[email protected]]
Sent: Thursday, October 12, 2017 8:35 PM
To: 'Mark Kettenis' <[email protected]>; 'Patrick Wildt'
<[email protected]>; '[email protected]' <[email protected]>
Subject: if_dwxe driver for h3
I dont think that the driver is starting the clocks and/or clearing the
reset. This is about the only thig that could cause the following on boot:
dwxe0: reset timeout
Testing on an orange pi one (H3).