software/libase/mdio: cleanup and reduce raw_turnaround by 1 cycle
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Fri, 9 Aug 2019 08:31:53 +0000 (10:31 +0200)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Fri, 9 Aug 2019 08:33:42 +0000 (10:33 +0200)
litex/soc/software/include/base/mdio.h
litex/soc/software/libbase/mdio.c

index 875e53c5663b46a92a24bedaf50894950a8faff7..bffa5a635a2a0dbd32519c5fd46cebc7b78c2832 100644 (file)
@@ -7,6 +7,12 @@
 
 #define MDIO_DI        0x01
 
+#define MDIO_PREAMBLE    0xffffffff
+#define MDIO_START       0x1
+#define MDIO_READ        0x2
+#define MDIO_WRITE       0x1
+#define MDIO_TURN_AROUND 0x2
+
 void mdio_write(int phyadr, int reg, int val);
 int mdio_read(int phyadr, int reg);
 
index 97487348d538f92ba6da7e1fe4660ea277c40000..362e274c4f7d6c96a677f861b7d4c6d0f3d530ae 100644 (file)
@@ -7,7 +7,8 @@
 
 static void delay(void)
 {
-/* no delay FIXME */
+       volatile int i;
+       for(i=0;i<100;i++);
 }
 
 static void raw_write(unsigned int word, int bitcount)
@@ -54,20 +55,17 @@ static void raw_turnaround(void)
        delay();
        ethphy_mdio_w_write(0);
        delay();
-       ethphy_mdio_w_write(MDIO_CLK);
-       delay();
-       ethphy_mdio_w_write(0);
-       delay();
 }
 
 void mdio_write(int phyadr, int reg, int val)
 {
        ethphy_mdio_w_write(MDIO_OE);
-       raw_write(0xffffffff, 32); /* < sync */
-       raw_write(0x05, 4); /* < start + write */
+       raw_write(MDIO_PREAMBLE, 32);
+       raw_write(MDIO_START, 2);
+       raw_write(MDIO_WRITE, 2);
        raw_write(phyadr, 5);
        raw_write(reg, 5);
-       raw_write(0x02, 2); /* < turnaround */
+       raw_write(MDIO_TURN_AROUND, 2);
        raw_write(val, 16);
        raw_turnaround();
 }
@@ -77,8 +75,9 @@ int mdio_read(int phyadr, int reg)
        int r;
 
        ethphy_mdio_w_write(MDIO_OE);
-       raw_write(0xffffffff, 32); /* < sync */
-       raw_write(0x06, 4); /* < start + read */
+       raw_write(MDIO_PREAMBLE, 32);
+       raw_write(MDIO_START, 2);
+       raw_write(MDIO_READ, 2);
        raw_write(phyadr, 5);
        raw_write(reg, 5);
        raw_turnaround();