[Feature][T108] [task-view-1618] optimize the PHY initialization process and provide r/w phy registers interfaces and test demo
Only Configure: No
Affected branch: GSW_V1453
Affected module: PHY
Self-test: yes
Doc Update: no
Change-Id: I43a2fd10a51a4f2e5b6b63038a080a3447663752
diff --git a/mbtk/test/libgsw_lib/gsw_mdio_test.c b/mbtk/test/libgsw_lib/gsw_mdio_test.c
new file mode 100755
index 0000000..4db60c7
--- /dev/null
+++ b/mbtk/test/libgsw_lib/gsw_mdio_test.c
@@ -0,0 +1,65 @@
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdint.h>
+#include <stdio.h>
+
+struct mdio_reg_op
+{
+ uint32_t reg;
+ uint32_t val;
+};
+
+#define DEVICE_NAME "/dev/mdio_misc"
+
+int main(int argc, char*argv[])
+{
+ int fd;
+ ssize_t ret;
+ struct mdio_reg_op reg_op;
+
+ if (argc != 2 && argc != 3)
+ {
+ fprintf(stderr, "Usage: %s <reg> [val]\n", argv[0]);
+ fprintf(stderr, " Read: %s 0x0 \n", argv[0]);
+ fprintf(stderr, " Write: %s 0x0 0x2100\n", argv[0]);
+ return -1;
+ }
+
+ fd = open(DEVICE_NAME, O_RDWR);
+ if (fd < 0)
+ {
+ perror("Failed to open device");
+ return -1;
+ }
+
+ reg_op.reg = strtoul(argv[1], NULL, 16);
+
+ if (argc == 2)
+ {
+ ret = read(fd, ®_op, sizeof(struct mdio_reg_op));
+ if (ret != sizeof(struct mdio_reg_op))
+ {
+ perror("Read operation failed");
+ close(fd);
+ return -1;
+ }
+ printf("Read success: reg=0x%08X, val=0x%08X\n", reg_op.reg, reg_op.val);
+ }
+ else
+ {
+ reg_op.val = strtoul(argv[2], NULL, 16);
+ ret = write(fd, ®_op, sizeof(reg_op));
+ if (ret != sizeof(reg_op))
+ {
+ perror("Write operation failed");
+ close(fd);
+ return -1;
+ }
+ printf("Write success: reg=0x%08X, val=0x%08X\n", reg_op.reg, reg_op.val);
+ }
+
+ close(fd);
+ return 0;
+}