mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-06 21:03:21 +09:00
![York Sun](/assets/img/avatar_default.png)
Add support for Freescale B4860 and variant SoCs. Features of B4860 are (incomplete list): Six fully-programmable StarCore SC3900 FVP subsystems, divided into three clusters-each core runs up to 1.2 GHz, with an architecture highly optimized for wireless base station applications Four dual-thread e6500 Power Architecture processors organized in one cluster-each core runs up to 1.8 GHz Two DDR3/3L controllers for high-speed, industry-standard memory interface each runs at up to 1866.67 MHz MAPLE-B3 hardware acceleration-for forward error correction schemes including Turbo or Viterbi decoding, Turbo encoding and rate matching, MIMO MMSE equalization scheme, matrix operations, CRC insertion and check, DFT/iDFT and FFT/iFFT calculations, PUSCH/PDSCH acceleration, and UMTS chip rate acceleration CoreNet fabric that fully supports coherency using MESI protocol between the e6500 cores, SC3900 FVP cores, memories and external interfaces. CoreNet fabric interconnect runs at 667 MHz and supports coherent and non-coherent out of order transactions with prioritization and bandwidth allocation amongst CoreNet endpoints. Data Path Acceleration Architecture, which includes the following: Frame Manager (FMan), which supports in-line packet parsing and general classification to enable policing and QoS-based packet distribution Queue Manager (QMan) and Buffer Manager (BMan), which allow offloading of queue management, task management, load distribution, flow ordering, buffer management, and allocation tasks from the cores Security engine (SEC 5.3)-crypto-acceleration for protocols such as IPsec, SSL, and 802.16 RapidIO manager (RMAN) - Support SRIO types 8, 9, 10, and 11 (inbound and outbound). Supports types 5, 6 (outbound only) Large internal cache memory with snooping and stashing capabilities for bandwidth saving and high utilization of processor elements. The 9856-Kbyte internal memory space includes the following: 32 Kbyte L1 ICache per e6500/SC3900 core 32 Kbyte L1 DCache per e6500/SC3900 core 2048 Kbyte unified L2 cache for each SC3900 FVP cluster 2048 Kbyte unified L2 cache for the e6500 cluster Two 512 Kbyte shared L3 CoreNet platform caches (CPC) Sixteen 10-GHz SerDes lanes serving: Two Serial RapidIO interfaces. Each supports up to 4 lanes and a total of up to 8 lanes Up to 8-lanes Common Public Radio Interface (CPRI) controller for glue- less antenna connection Two 10-Gbit Ethernet controllers (10GEC) Six 1G/2.5-Gbit Ethernet controllers for network communications PCI Express controller Debug (Aurora) Two OCeaN DMAs Various system peripherals 182 32-bit timers Signed-off-by: York Sun <yorksun@freescale.com> Signed-off-by: Prabhakar Kushwaha <prabhakar@freescale.com> Signed-off-by: Roy Zang <tie-fei.zang@freescale.com> Signed-off-by: Andy Fleming <afleming@freescale.com>
163 lines
4.4 KiB
C
163 lines
4.4 KiB
C
/*
|
|
* Copyright 2012 Freescale Semiconductor, Inc.
|
|
*
|
|
* See file CREDITS for list of people who contributed to this
|
|
* project.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of
|
|
* the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
* MA 02111-1307 USA
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <asm/fsl_serdes.h>
|
|
#include <asm/processor.h>
|
|
#include <asm/io.h>
|
|
#include "fsl_corenet2_serdes.h"
|
|
|
|
struct serdes_config {
|
|
u8 protocol;
|
|
u8 lanes[SRDS_MAX_LANES];
|
|
};
|
|
|
|
static struct serdes_config serdes1_cfg_tbl[] = {
|
|
/* SerDes 1 */
|
|
{0x0D, {CPRI8, CPRI7, CPRI6, CPRI5,
|
|
CPRI4, CPRI3, CPRI2, CPRI1}},
|
|
{0x0E, {CPRI8, CPRI7, CPRI6, CPRI5,
|
|
CPRI4, CPRI3, CPRI2, CPRI1}},
|
|
{0x12, {CPRI8, CPRI7, CPRI6, CPRI5,
|
|
CPRI4, CPRI3, CPRI2, CPRI1}},
|
|
{0x2a, {SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6,
|
|
CPRI6, CPRI5, CPRI4, CPRI3, CPRI2, CPRI1}},
|
|
{0x30, {AURORA, AURORA,
|
|
SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4,
|
|
CPRI4, CPRI3, CPRI2, CPRI1}},
|
|
{0x32, {AURORA, AURORA,
|
|
SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4,
|
|
CPRI4, CPRI3, CPRI2, CPRI1}},
|
|
{0x33, {AURORA, AURORA,
|
|
SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4,
|
|
CPRI4, CPRI3, CPRI2, CPRI1}},
|
|
{0x34, {AURORA, AURORA,
|
|
SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4,
|
|
CPRI4, CPRI3, CPRI2, CPRI1}},
|
|
{0x3E, {CPRI8, CPRI7, CPRI6, CPRI5,
|
|
CPRI4, CPRI3, CPRI2, CPRI1}},
|
|
{}
|
|
};
|
|
static struct serdes_config serdes2_cfg_tbl[] = {
|
|
/* SerDes 2 */
|
|
{0x18, {SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
|
|
SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4,
|
|
AURORA, AURORA, SRIO1, SRIO1}},
|
|
{0x1D, {SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
|
|
SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4,
|
|
AURORA, AURORA, SRIO1, SRIO1}},
|
|
{0x2B, {SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
|
|
SRIO2, SRIO2,
|
|
AURORA, AURORA, SRIO1, SRIO1}},
|
|
{0x30, {SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
|
|
SRIO2, SRIO2,
|
|
AURORA, AURORA,
|
|
SRIO1, SRIO1}},
|
|
{0x49, {SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
|
|
SGMII_FM1_DTSEC3, AURORA,
|
|
SRIO1, SRIO1, SRIO1, SRIO1}},
|
|
{0x4A, {SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
|
|
SGMII_FM1_DTSEC3, AURORA,
|
|
SRIO1, SRIO1, SRIO1, SRIO1}},
|
|
{0x4C, {SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
|
|
SGMII_FM1_DTSEC3, AURORA,
|
|
SRIO1, SRIO1, SRIO1, SRIO1}},
|
|
{0x4E, {SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
|
|
SGMII_FM1_DTSEC3, AURORA,
|
|
SRIO1, SRIO1, SRIO1, SRIO1}},
|
|
{0x84, {SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
|
|
SRIO2, SRIO2, AURORA, AURORA,
|
|
XFI_FM1_MAC9, XFI_FM1_MAC10}},
|
|
{0x85, {SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
|
|
SRIO2, SRIO2, AURORA, AURORA,
|
|
XFI_FM1_MAC9, XFI_FM1_MAC10}},
|
|
{0x87, {SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
|
|
SRIO2, SRIO2,
|
|
SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4,
|
|
XFI_FM1_MAC9, XFI_FM1_MAC10}},
|
|
{0x93, {SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
|
|
SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4,
|
|
XAUI_FM1_MAC10, XAUI_FM1_MAC10,
|
|
XAUI_FM1_MAC10, XAUI_FM1_MAC10}},
|
|
{0x9E, {PCIE1, PCIE1, PCIE1, PCIE1,
|
|
XAUI_FM1_MAC10, XAUI_FM1_MAC10,
|
|
XAUI_FM1_MAC10, XAUI_FM1_MAC10}},
|
|
{0x9A, {PCIE1, PCIE1,
|
|
SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4,
|
|
XAUI_FM1_MAC10, XAUI_FM1_MAC10,
|
|
XAUI_FM1_MAC10, XAUI_FM1_MAC10}},
|
|
{0xB2, {PCIE1, PCIE1, PCIE1, PCIE1,
|
|
SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4,
|
|
XFI_FM1_MAC9, XFI_FM1_MAC10}},
|
|
{0xC3, {XAUI_FM1_MAC9, XAUI_FM1_MAC9,
|
|
XAUI_FM1_MAC9, XAUI_FM1_MAC9,
|
|
SRIO1, SRIO1, SRIO1, SRIO1}},
|
|
{}
|
|
};
|
|
static struct serdes_config *serdes_cfg_tbl[] = {
|
|
serdes1_cfg_tbl,
|
|
serdes2_cfg_tbl,
|
|
};
|
|
|
|
enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane)
|
|
{
|
|
struct serdes_config *ptr;
|
|
|
|
if (serdes >= ARRAY_SIZE(serdes_cfg_tbl))
|
|
return 0;
|
|
|
|
ptr = serdes_cfg_tbl[serdes];
|
|
while (ptr->protocol) {
|
|
if (ptr->protocol == cfg)
|
|
return ptr->lanes[lane];
|
|
ptr++;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int is_serdes_prtcl_valid(int serdes, u32 prtcl)
|
|
{
|
|
int i;
|
|
struct serdes_config *ptr;
|
|
|
|
if (serdes >= ARRAY_SIZE(serdes_cfg_tbl))
|
|
return 0;
|
|
|
|
ptr = serdes_cfg_tbl[serdes];
|
|
while (ptr->protocol) {
|
|
if (ptr->protocol == prtcl)
|
|
break;
|
|
ptr++;
|
|
}
|
|
|
|
if (!ptr->protocol)
|
|
return 0;
|
|
|
|
for (i = 0; i < SRDS_MAX_LANES; i++) {
|
|
if (ptr->lanes[i] != NONE)
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|