11eda59ffSKumar Gala /* 21eda59ffSKumar Gala * Copyright 2009-2011 Freescale Semiconductor, Inc. 31eda59ffSKumar Gala * 41eda59ffSKumar Gala * See file CREDITS for list of people who contributed to this 51eda59ffSKumar Gala * project. 61eda59ffSKumar Gala * 71eda59ffSKumar Gala * This program is free software; you can redistribute it and/or 81eda59ffSKumar Gala * modify it under the terms of the GNU General Public License as 91eda59ffSKumar Gala * published by the Free Software Foundation; either version 2 of 101eda59ffSKumar Gala * the License, or (at your option) any later version. 111eda59ffSKumar Gala * 121eda59ffSKumar Gala * This program is distributed in the hope that it will be useful, 131eda59ffSKumar Gala * but WITHOUT ANY WARRANTY; without even the implied warranty of 141eda59ffSKumar Gala * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 151eda59ffSKumar Gala * GNU General Public License for more details. 161eda59ffSKumar Gala * 171eda59ffSKumar Gala * You should have received a copy of the GNU General Public License 181eda59ffSKumar Gala * along with this program; if not, write to the Free Software 191eda59ffSKumar Gala * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 201eda59ffSKumar Gala * MA 02111-1307 USA 211eda59ffSKumar Gala */ 221eda59ffSKumar Gala 231eda59ffSKumar Gala #include <common.h> 241eda59ffSKumar Gala #include <asm/fsl_serdes.h> 251eda59ffSKumar Gala #include <asm/processor.h> 261eda59ffSKumar Gala #include <asm/io.h> 271eda59ffSKumar Gala #include "fsl_corenet_serdes.h" 281eda59ffSKumar Gala 291eda59ffSKumar Gala static u8 serdes_cfg_tbl[][SRDS_MAX_LANES] = { 301eda59ffSKumar Gala [0x2] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2, 311eda59ffSKumar Gala PCIE4, AURORA, PCIE3, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3, 321eda59ffSKumar Gala SGMII_FM1_DTSEC4, NONE, NONE, SATA1, SATA2, }, 331eda59ffSKumar Gala [0x4] = {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1, 341eda59ffSKumar Gala PCIE2, AURORA, PCIE3, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3, 351eda59ffSKumar Gala SGMII_FM1_DTSEC4, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1, }, 361eda59ffSKumar Gala [0xb] = {PCIE1, PCIE1, PCIE1, PCIE1, SRIO2, SRIO2, SRIO1, SRIO1, 371eda59ffSKumar Gala PCIE2, AURORA, PCIE3, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3, 381eda59ffSKumar Gala SGMII_FM1_DTSEC4, NONE, NONE, SATA1, SATA2, }, 391eda59ffSKumar Gala [0x10] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, 401eda59ffSKumar Gala AURORA, AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1, 411eda59ffSKumar Gala NONE, NONE, SATA1, SATA2, }, 421eda59ffSKumar Gala [0x11] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2, 431eda59ffSKumar Gala AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, 441eda59ffSKumar Gala SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, NONE, NONE, SATA1, SATA2, }, 451eda59ffSKumar Gala [0x13] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2, 461eda59ffSKumar Gala AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, 471eda59ffSKumar Gala SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, XAUI_FM1, XAUI_FM1, 481eda59ffSKumar Gala XAUI_FM1, XAUI_FM1, }, 491eda59ffSKumar Gala [0x14] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2, 501eda59ffSKumar Gala AURORA, AURORA, PCIE3, PCIE3, PCIE3, PCIE3, 511eda59ffSKumar Gala SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3, 521eda59ffSKumar Gala SGMII_FM1_DTSEC4, }, 531eda59ffSKumar Gala [0x15] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2, 541eda59ffSKumar Gala AURORA, AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1, 551eda59ffSKumar Gala NONE, NONE, SATA1, SATA2, }, 561eda59ffSKumar Gala [0x16] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2, 571eda59ffSKumar Gala AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, 581eda59ffSKumar Gala SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, SRIO1, SRIO1, SRIO1, 591eda59ffSKumar Gala SRIO1, }, 601eda59ffSKumar Gala [0x17] = {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1, 611eda59ffSKumar Gala AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, 621eda59ffSKumar Gala SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, NONE, NONE, SATA1, SATA2, }, 631eda59ffSKumar Gala [0x18] = {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1, 641eda59ffSKumar Gala AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, 651eda59ffSKumar Gala SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, SGMII_FM1_DTSEC5, NONE, 661eda59ffSKumar Gala NONE, NONE, }, 671eda59ffSKumar Gala [0x1b] = {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1, 681eda59ffSKumar Gala AURORA, AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1, 691eda59ffSKumar Gala NONE, NONE, SATA1, SATA2, }, 701eda59ffSKumar Gala [0x1d] = {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1, 711eda59ffSKumar Gala AURORA, AURORA, PCIE3, PCIE3, PCIE3, PCIE3, NONE, NONE, 721eda59ffSKumar Gala SATA1, SATA2, }, 731eda59ffSKumar Gala [0x20] = {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1, 741eda59ffSKumar Gala AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, 751eda59ffSKumar Gala SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, XAUI_FM1, XAUI_FM1, 761eda59ffSKumar Gala XAUI_FM1, XAUI_FM1, }, 771eda59ffSKumar Gala [0x21] = {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1, 781eda59ffSKumar Gala AURORA, AURORA, PCIE3, PCIE3, PCIE3, PCIE3, 791eda59ffSKumar Gala SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3, 801eda59ffSKumar Gala SGMII_FM1_DTSEC4, }, 811eda59ffSKumar Gala [0x22] = {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1, 821eda59ffSKumar Gala AURORA, AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1, 831eda59ffSKumar Gala NONE, NONE, SATA1, SATA2, }, 841eda59ffSKumar Gala [0x23] = {PCIE1, PCIE1, PCIE1, PCIE1, SRIO2, SRIO2, SRIO1, SRIO1, 851eda59ffSKumar Gala AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, 861eda59ffSKumar Gala SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, NONE, NONE, SATA1, SATA2, }, 871eda59ffSKumar Gala [0x24] = {PCIE1, PCIE1, PCIE1, PCIE1, SRIO2, SRIO2, SRIO1, SRIO1, 881eda59ffSKumar Gala AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, 891eda59ffSKumar Gala SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, SGMII_FM1_DTSEC5, NONE, 901eda59ffSKumar Gala NONE, NONE, }, 911eda59ffSKumar Gala [0x28] = {PCIE1, PCIE1, PCIE3, PCIE3, PCIE2, PCIE2, PCIE2, PCIE2, 921eda59ffSKumar Gala AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, 931eda59ffSKumar Gala SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, NONE, NONE, SATA1, SATA2, }, 941eda59ffSKumar Gala [0x29] = {PCIE1, PCIE1, PCIE3, PCIE3, PCIE2, PCIE2, PCIE2, PCIE2, 951eda59ffSKumar Gala AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, 961eda59ffSKumar Gala SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, SGMII_FM1_DTSEC5, NONE, 971eda59ffSKumar Gala NONE, NONE, }, 981eda59ffSKumar Gala [0x2a] = {PCIE1, PCIE1, PCIE3, PCIE3, PCIE2, PCIE2, PCIE2, PCIE2, 991eda59ffSKumar Gala AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, 1001eda59ffSKumar Gala SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, XAUI_FM1, XAUI_FM1, 1011eda59ffSKumar Gala XAUI_FM1, XAUI_FM1, }, 1021eda59ffSKumar Gala [0x2b] = {PCIE1, PCIE1, PCIE3, PCIE3, PCIE2, PCIE2, PCIE2, PCIE2, 1031eda59ffSKumar Gala AURORA, AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1, 1041eda59ffSKumar Gala NONE, NONE, SATA1, SATA2, }, 1051eda59ffSKumar Gala [0x2f] = {PCIE1, PCIE1, PCIE3, PCIE3, SRIO2, SRIO2, SRIO1, SRIO1, 1061eda59ffSKumar Gala AURORA, AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1, 1071eda59ffSKumar Gala NONE, NONE, SATA1, SATA2, }, 1081eda59ffSKumar Gala [0x31] = {PCIE1, PCIE1, PCIE3, PCIE3, SRIO1, SRIO1, SRIO1, SRIO1, 1091eda59ffSKumar Gala AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, 1101eda59ffSKumar Gala SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, SGMII_FM1_DTSEC5, NONE, 1111eda59ffSKumar Gala NONE, NONE, }, 1121eda59ffSKumar Gala [0x33] = {PCIE1, PCIE1, PCIE3, PCIE3, SRIO1, SRIO1, SRIO1, SRIO1, 1131eda59ffSKumar Gala AURORA, AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1, 1141eda59ffSKumar Gala NONE, NONE, SATA1, SATA2, }, 1151eda59ffSKumar Gala [0x34] = {PCIE1, PCIE1, PCIE1, PCIE1, SGMII_FM1_DTSEC1, 1161eda59ffSKumar Gala SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, AURORA, 1171eda59ffSKumar Gala AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1, NONE, 1181eda59ffSKumar Gala NONE, SATA1, SATA2, }, 1191eda59ffSKumar Gala [0x35] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, 1201eda59ffSKumar Gala SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, AURORA, AURORA, XAUI_FM1, 1211eda59ffSKumar Gala XAUI_FM1, XAUI_FM1, XAUI_FM1, NONE, NONE, SATA1, SATA2, }, 1221eda59ffSKumar Gala [0x36] = {PCIE1, PCIE1, PCIE3, PCIE3, SGMII_FM1_DTSEC1, 1231eda59ffSKumar Gala SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, AURORA, 1241eda59ffSKumar Gala AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1, NONE, 1251eda59ffSKumar Gala NONE, SATA1, SATA2, }, 1261eda59ffSKumar Gala [0x37] = {PCIE1, PCIE1, PCIE3, PCIE3, PCIE2, PCIE2, 1271eda59ffSKumar Gala SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, AURORA, AURORA, XAUI_FM1, 1281eda59ffSKumar Gala XAUI_FM1, XAUI_FM1, XAUI_FM1, NONE, NONE, SATA1, SATA2, }, 1291eda59ffSKumar Gala }; 1301eda59ffSKumar Gala 1311eda59ffSKumar Gala enum srds_prtcl serdes_get_prtcl(int cfg, int lane) 1321eda59ffSKumar Gala { 1331eda59ffSKumar Gala if (!serdes_lane_enabled(lane)) 1341eda59ffSKumar Gala return NONE; 1351eda59ffSKumar Gala 1361eda59ffSKumar Gala return serdes_cfg_tbl[cfg][lane]; 1371eda59ffSKumar Gala } 1381eda59ffSKumar Gala 1391eda59ffSKumar Gala int is_serdes_prtcl_valid(u32 prtcl) { 1401eda59ffSKumar Gala int i; 1411eda59ffSKumar Gala 142*e51e47d3SAxel Lin if (prtcl >= ARRAY_SIZE(serdes_cfg_tbl)) 1431eda59ffSKumar Gala return 0; 1441eda59ffSKumar Gala 1451eda59ffSKumar Gala for (i = 0; i < SRDS_MAX_LANES; i++) { 1461eda59ffSKumar Gala if (serdes_cfg_tbl[prtcl][i] != NONE) 1471eda59ffSKumar Gala return 1; 1481eda59ffSKumar Gala } 1491eda59ffSKumar Gala 1501eda59ffSKumar Gala return 0; 1511eda59ffSKumar Gala } 152