summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 0c096aa)
raw | patch | inline | side by side (parent: 0c096aa)
author | Hao Zhang <hzhang@ti.com> | |
Mon, 14 Jan 2013 21:34:34 +0000 (16:34 -0500) | ||
committer | Hao Zhang <hzhang@ti.com> | |
Mon, 14 Jan 2013 21:34:34 +0000 (16:34 -0500) |
evmk2h/platform_lib/src/platform.c | patch | blob | history | |
evmk2k/platform_lib/src/evmc66x_phy.c | patch | blob | history |
index 76971fe894d726bdcaa67b8df2e96616f13ab24d..f6753b86051c89989de8da3919f0a149b5cbd807 100755 (executable)
#pragma DATA_SECTION(emac_port_mode,"platform_lib");\r
PLATFORM_EMAC_PORT_MODE emac_port_mode[PLATFORM_MAX_EMAC_PORT_NUM] =\r
{\r
- PLATFORM_EMAC_PORT_MODE_AMC,\r
+ PLATFORM_EMAC_PORT_MODE_PHY,\r
PLATFORM_EMAC_PORT_MODE_PHY\r
};\r
\r
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