]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-rtos/mcsdk-platform.git/commitdiff
MCSDK 3.0: add serdes configuration function
authorHao Zhang <hzhang@ti.com>
Wed, 9 Jan 2013 18:50:09 +0000 (13:50 -0500)
committerHao Zhang <hzhang@ti.com>
Wed, 9 Jan 2013 18:50:09 +0000 (13:50 -0500)
evmk2h/platform_lib/src/evmc66x_phy.c

index 48ff38a9e7cfef3dd7c080b1eda4cc399d274023..a52388a2963c187b4290a61a6b505a2a644031c7 100755 (executable)
  ******************************************************************************/\r
 /* Chip Level definitions include */\r
 #include "platform_internal.h"\r
-#include <ti/csl/src/ip/serdes/csl_eth_serdes.c>\r
+\r
+unsigned int pa_serdes_cfg_base =  0x0232A000;\r
+#define PASS_CFG_BASE                  0x02000000\r
+#define SGMII0_OFFSET                  0x00090100\r
+#define SGMII1_OFFSET                  0x00090200\r
+#define SGMII2_OFFSET                  0x00090400\r
+#define SGMII3_OFFSET                  0x00090500\r
+#define SGMII0_STATUS                  *((volatile unsigned int *)(PASS_CFG_BASE + SGMII0_OFFSET + 0x14))\r
+#define SGMII1_STATUS                  *((volatile unsigned int *)(PASS_CFG_BASE + SGMII1_OFFSET + 0x14))\r
+#define SGMII2_STATUS                  *((volatile unsigned int *)(PASS_CFG_BASE + SGMII2_OFFSET + 0x14))\r
+#define SGMII3_STATUS                  *((volatile unsigned int *)(PASS_CFG_BASE + SGMII3_OFFSET + 0x14))\r
+\r
+\r
+#define mkptr(base,offset)     ((volatile unsigned int *)((base)+(offset)))\r
+unsigned int reg_poll_to(unsigned int wdth, \r
+                         unsigned int addr, \r
+                         unsigned int poll_val, \r
+                         unsigned int masked_bits, \r
+                         unsigned int to_cycles)\r
+{\r
+       unsigned int read_data, read_data_masked;\r
+       unsigned int loop_count = 0;\r
+       read_data = (*(unsigned int *) (addr));\r
+       read_data_masked = read_data & masked_bits;\r
+\r
+\r
+       while (read_data_masked != (poll_val & masked_bits))\r
+       {\r
+\r
+               read_data = (*(volatile unsigned int *) (addr));\r
+               read_data_masked = read_data & masked_bits;\r
+\r
+               loop_count++;\r
+\r
+               if( loop_count == to_cycles )\r
+               {\r
+            printf("reg_poll_to max Limit reached \n");\r
+                       return 1;\r
+               }\r
+       }\r
+\r
+       return 0;\r
+}\r
+//#define SERDES_INTERNAL_LOOPBACK\r
+void CSL_SgmiiDefSerdesSetup()\r
+{\r
+  unsigned int old_val;\r
+   volatile unsigned int i;\r
+\r
+\r
+      old_val = (*mkptr(pa_serdes_cfg_base, 0x000));\r
+     (*mkptr(pa_serdes_cfg_base, 0x000)) = ((old_val & 0x0000FFFF)| 0x00800000);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x014));\r
+     (*mkptr(pa_serdes_cfg_base, 0x014)) = ((old_val & 0xFFFF0000)| 0x00008282);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x060));\r
+     (*mkptr(pa_serdes_cfg_base, 0x060)) = ((old_val & 0xFF000000)| 0x00142438);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x064));\r
+     (*mkptr(pa_serdes_cfg_base, 0x064)) = ((old_val & 0xFF0000FF)| 0x00C3C700);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x078));\r
+     (*mkptr(pa_serdes_cfg_base, 0x078)) = ((old_val & 0xFFFF00FF)| 0x0000C000);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x204));\r
+     (*mkptr(pa_serdes_cfg_base, 0x204)) = ((old_val & 0x00FFFF00)| 0x38000080);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x208));\r
+     (*mkptr(pa_serdes_cfg_base, 0x208)) = ((old_val & 0xFFFFFF00)| 0x00000000);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x20C));\r
+     (*mkptr(pa_serdes_cfg_base, 0x20C)) = ((old_val & 0x00FFFFFF)| 0x02000000);\r
+\r
+      old_val = (*mkptr(pa_serdes_cfg_base, 0x210));\r
+     (*mkptr(pa_serdes_cfg_base, 0x210)) = ((old_val & 0x00FFFFFF)| 0x1B000000);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x214));\r
+     (*mkptr(pa_serdes_cfg_base, 0x214)) = ((old_val & 0xFFFF0000)| 0x00006FB8);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x218));\r
+     (*mkptr(pa_serdes_cfg_base, 0x218)) = ((old_val & 0x0000FF00)| 0x758000E4);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x2AC));\r
+     (*mkptr(pa_serdes_cfg_base, 0x2AC)) = ((old_val & 0xFFFF00FF)| 0x00004400);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x22C));\r
+     (*mkptr(pa_serdes_cfg_base, 0x22C)) = ((old_val & 0xFF0000FF)| 0x00100800);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x280));\r
+     (*mkptr(pa_serdes_cfg_base, 0x280)) = ((old_val & 0xFF00FF00)| 0x00820082);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x284));\r
+     (*mkptr(pa_serdes_cfg_base, 0x284)) = ((old_val & 0x00000000)| 0x1D0F0385);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x404));\r
+     (*mkptr(pa_serdes_cfg_base, 0x404)) = ((old_val & 0x00FFFF00)| 0x38000080);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x408));\r
+     (*mkptr(pa_serdes_cfg_base, 0x408)) = ((old_val & 0xFFFFFF00)| 0x00000000);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x40C));\r
+     (*mkptr(pa_serdes_cfg_base, 0x40C)) = ((old_val & 0x00FFFFFF)| 0x02000000);\r
+\r
+      old_val = (*mkptr(pa_serdes_cfg_base, 0x410));\r
+     (*mkptr(pa_serdes_cfg_base, 0x410)) = ((old_val & 0x00FFFFFF)| 0x1B000000);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x414));\r
+     (*mkptr(pa_serdes_cfg_base, 0x414)) = ((old_val & 0xFFFF0000)| 0x00006FB8);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x418));\r
+     (*mkptr(pa_serdes_cfg_base, 0x418)) = ((old_val & 0x0000FF00)| 0x758000E4);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x4AC));\r
+     (*mkptr(pa_serdes_cfg_base, 0x4AC)) = ((old_val & 0xFFFF00FF)| 0x00004400);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x42C));\r
+     (*mkptr(pa_serdes_cfg_base, 0x42C)) = ((old_val & 0xFF0000FF)| 0x00100800);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x480));\r
+     (*mkptr(pa_serdes_cfg_base, 0x480)) = ((old_val & 0xFF00FF00)| 0x00820082);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x484));\r
+     (*mkptr(pa_serdes_cfg_base, 0x484)) = ((old_val & 0x00000000)| 0x1D0F0385);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x604));\r
+     (*mkptr(pa_serdes_cfg_base, 0x604)) = ((old_val & 0x00FFFF00)| 0x38000080);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x608));\r
+     (*mkptr(pa_serdes_cfg_base, 0x608)) = ((old_val & 0xFFFFFF00)| 0x00000000);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x60C));\r
+     (*mkptr(pa_serdes_cfg_base, 0x60C)) = ((old_val & 0x00FFFFFF)| 0x02000000);\r
+\r
+      old_val = (*mkptr(pa_serdes_cfg_base, 0x610));\r
+     (*mkptr(pa_serdes_cfg_base, 0x610)) = ((old_val & 0x00FFFFFF)| 0x1B000000);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x614));\r
+     (*mkptr(pa_serdes_cfg_base, 0x614)) = ((old_val & 0xFFFF0000)| 0x00006FB8);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x618));\r
+     (*mkptr(pa_serdes_cfg_base, 0x618)) = ((old_val & 0x0000FF00)| 0x758000E4);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x6AC));\r
+     (*mkptr(pa_serdes_cfg_base, 0x6AC)) = ((old_val & 0xFFFF00FF)| 0x00004400);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x62C));\r
+     (*mkptr(pa_serdes_cfg_base, 0x62C)) = ((old_val & 0xFF0000FF)| 0x00100800);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x680));\r
+     (*mkptr(pa_serdes_cfg_base, 0x680)) = ((old_val & 0xFF00FF00)| 0x00820082);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x684));\r
+     (*mkptr(pa_serdes_cfg_base, 0x684)) = ((old_val & 0x00000000)| 0x1D0F0385);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x804));\r
+     (*mkptr(pa_serdes_cfg_base, 0x804)) = ((old_val & 0x00FFFF00)| 0x38000080);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x808));\r
+     (*mkptr(pa_serdes_cfg_base, 0x808)) = ((old_val & 0xFFFFFF00)| 0x00000000);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x80C));\r
+     (*mkptr(pa_serdes_cfg_base, 0x80C)) = ((old_val & 0x00FFFFFF)| 0x02000000);\r
+\r
+      old_val = (*mkptr(pa_serdes_cfg_base, 0x810));\r
+     (*mkptr(pa_serdes_cfg_base, 0x810)) = ((old_val & 0x00FFFFFF)| 0x1B000000);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x814));\r
+     (*mkptr(pa_serdes_cfg_base, 0x814)) = ((old_val & 0xFFFF0000)| 0x00006FB8);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x818));\r
+     (*mkptr(pa_serdes_cfg_base, 0x818)) = ((old_val & 0x0000FF00)| 0x758000E4);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x8AC));\r
+     (*mkptr(pa_serdes_cfg_base, 0x8AC)) = ((old_val & 0xFFFF00FF)| 0x00004400);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x82C));\r
+     (*mkptr(pa_serdes_cfg_base, 0x82C)) = ((old_val & 0xFF0000FF)| 0x00100800);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x880));\r
+     (*mkptr(pa_serdes_cfg_base, 0x880)) = ((old_val & 0xFF00FF00)| 0x00820082);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0x884));\r
+     (*mkptr(pa_serdes_cfg_base, 0x884)) = ((old_val & 0x00000000)| 0x1D0F0385);\r
+\r
+     old_val = (*mkptr(pa_serdes_cfg_base, 0xa00));\r
+    (*mkptr(pa_serdes_cfg_base, 0xa00)) = ((old_val & 0xFFFF00FF)| 0x00000800);\r
+\r
+    old_val = (*mkptr(pa_serdes_cfg_base, 0xa08));\r
+    (*mkptr(pa_serdes_cfg_base, 0xa08)) = ((old_val & 0x0000FFFF)| 0X38A20000);\r
+\r
+    old_val = (*mkptr(pa_serdes_cfg_base, 0xa30));\r
+    (*mkptr(pa_serdes_cfg_base, 0xa30)) = ((old_val & 0xFF0000FF)| 0x008A8A00);\r
+\r
+    old_val = (*mkptr(pa_serdes_cfg_base, 0xa84));\r
+    (*mkptr(pa_serdes_cfg_base, 0xa84)) = ((old_val & 0xFFFF00FF)| 0x00000600);\r
+\r
+    old_val = (*mkptr(pa_serdes_cfg_base, 0xa94));\r
+    (*mkptr(pa_serdes_cfg_base, 0xa94)) = ((old_val & 0x00FFFFFF)| 0x10000000);\r
+\r
+    old_val = (*mkptr(pa_serdes_cfg_base, 0xaa0));\r
+    (*mkptr(pa_serdes_cfg_base, 0xaa0)) = ((old_val & 0x00FFFFFF)| 0x81000000);\r
+\r
+    old_val = (*mkptr(pa_serdes_cfg_base, 0xabc));\r
+    (*mkptr(pa_serdes_cfg_base, 0xabc)) = ((old_val & 0x00FFFFFF)| 0xFF000000);\r
+\r
+    old_val = (*mkptr(pa_serdes_cfg_base, 0xac0));\r
+    (*mkptr(pa_serdes_cfg_base, 0xabc)) = ((old_val & 0xFFFFFF00)| 0x0000008B);\r
+\r
+    old_val = (*mkptr(pa_serdes_cfg_base, 0xb08));\r
+    (*mkptr(pa_serdes_cfg_base, 0xb08)) = ((old_val & 0x0000FFFF)| 0x583F0000);\r
+\r
+    old_val = (*mkptr(pa_serdes_cfg_base, 0xb0c));\r
+    (*mkptr(pa_serdes_cfg_base, 0xb0c)) = ((old_val & 0xFFFFFF00)| 0x0000004e);\r
+\r
+   #ifdef  SERDES_INTERNAL_LOOPBACK\r
+   /*Beginning of SERDES LOOPBACK Configuration*/\r
+   old_val = (*mkptr(pa_serdes_cfg_base, 0x200));\r
+   (*mkptr(pa_serdes_cfg_base, 0x200)) = ((old_val & 0x00FFFFFF)| 0x40000000);\r
+\r
+   old_val = (*mkptr(pa_serdes_cfg_base, 0x400));\r
+   (*mkptr(pa_serdes_cfg_base, 0x400)) = ((old_val & 0x00FFFFFF)| 0x40000000);\r
+\r
+   old_val = (*mkptr(pa_serdes_cfg_base, 0x600));\r
+   (*mkptr(pa_serdes_cfg_base, 0x600)) = ((old_val & 0x00FFFFFF)| 0x40000000);\r
+\r
+   old_val = (*mkptr(pa_serdes_cfg_base, 0x800));\r
+   (*mkptr(pa_serdes_cfg_base, 0x800)) = ((old_val & 0x00FFFFFF)| 0x40000000);\r
+  /*End of Serdes loopback configuration*/\r
+  #endif\r
+\r
+   old_val = (*mkptr(pa_serdes_cfg_base, 0x000));\r
+  (*mkptr(pa_serdes_cfg_base, 0x000)) = ((old_val & 0xFFFFFF00)| 0x00000003);\r
+\r
+  old_val = (*mkptr(pa_serdes_cfg_base, 0xa00));\r
+  (*mkptr(pa_serdes_cfg_base, 0xa00)) = ((old_val & 0xFFFFFF00)| 0x0000005F);\r
+\r
+\r
+ /*Enable TX and RX via the LANExCTL_STS 0x0000 + x*4 */\r
+   *mkptr(pa_serdes_cfg_base, 0x1fe0) = 0xF800F8C0;\r
+   *mkptr(pa_serdes_cfg_base, 0x1fe4) = 0xF800F8C0;\r
+   *mkptr(pa_serdes_cfg_base, 0x1fe8) = 0xF800F8C0;\r
+   *mkptr(pa_serdes_cfg_base, 0x1fec) = 0xF800F8C0;\r
+\r
+   /*Enable pll via the pll_ctrl 0x0014*/\r
+   *mkptr(pa_serdes_cfg_base, 0x1ff4) = 0xe0000000;\r
+\r
+  /*Waiting for SGMII Serdes PLL lock.*/\r
+  reg_poll_to(32, SGMII0_STATUS, 0x10, 0x10, 10000);\r
+  reg_poll_to(32, SGMII1_STATUS, 0x10, 0x10, 10000);\r
+  reg_poll_to(32, SGMII2_STATUS, 0x10, 0x10, 10000);\r
+  reg_poll_to(32, SGMII3_STATUS, 0x10, 0x10, 10000);\r
+\r
+\r
+  for(i = 0; i < 5000; i++);\r
+  for(i = 0; i < 40000; i++);\r
+}\r
+\r
 \r
 /**\r
  *  @brief\r