Add support for Freescale T1024/T1023 SoC. The T1024 SoC includes the following function and features: - Two 64-bit Power architecture e5500 cores, up to 1.4GHz - private 256KB L2 cache each core and shared 256KB CoreNet platform cache (CPC) - 32-/64-bit DDR3L/DDR4 SDRAM memory controller with ECC and interleaving support - Data Path Acceleration Architecture (DPAA) incorporating acceleration - Four MAC for 1G/2.5G/10G network interfaces (RGMII, SGMII, QSGMII, XFI) - High-speed peripheral interfaces - Three PCI Express 2.0 controllers - Additional peripheral interfaces - One SATA 2.0 controller - Two USB 2.0 controllers with integrated PHY - Enhanced secure digital host controller (SD/eSDHC/eMMC) - Enhanced serial peripheral interface (eSPI) - Four I2C controllers - Four 2-pin UARTs or two 4-pin UARTs - Integrated Flash Controller supporting NAND and NOR flash - Two 8-channel DMA engines - Multicore programmable interrupt controller (PIC) - LCD interface (DIU) with 12 bit dual data rate - QUICC Engine block supporting TDM, HDLC, and UART - Deep Sleep power implementaion (wakeup from GPIO/Timer/Ethernet/USB) - Support for hardware virtualization and partitioning enforcement - QorIQ Platform's Trust Architecture 2.0 Differences between T1024 and T1023: Feature T1024 T1023 QUICC Engine: yes no DIU: yes no Deep Sleep: yes no I2C controller: 4 3 DDR: 64-bit 32-bit IFC: 32-bit 28-bit Signed-off-by: Shengzhou Liu <Shengzhou.Liu@freescale.com> Reviewed-by: York Sun <yorksun@freescale.com>master
parent
789b3447c0
commit
f605079041
@ -0,0 +1,82 @@ |
||||
/*
|
||||
* Copyright 2014 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <asm/fsl_portals.h> |
||||
#include <asm/fsl_liodn.h> |
||||
|
||||
#ifdef CONFIG_SYS_DPAA_QBMAN |
||||
struct qportal_info qp_info[CONFIG_SYS_QMAN_NUM_PORTALS] = { |
||||
/* dqrr liodn, frame data liodn, liodn off, sdest */ |
||||
SET_QP_INFO(1, 27, 1, 0), |
||||
SET_QP_INFO(2, 28, 1, 0), |
||||
SET_QP_INFO(3, 29, 1, 1), |
||||
SET_QP_INFO(4, 30, 1, 1), |
||||
SET_QP_INFO(5, 31, 1, 2), |
||||
SET_QP_INFO(6, 32, 1, 2), |
||||
SET_QP_INFO(7, 33, 1, 3), |
||||
SET_QP_INFO(8, 34, 1, 3), |
||||
SET_QP_INFO(9, 35, 1, 0), |
||||
SET_QP_INFO(10, 36, 1, 0), |
||||
}; |
||||
#endif |
||||
|
||||
struct liodn_id_table liodn_tbl[] = { |
||||
#ifdef CONFIG_SYS_DPAA_QBMAN |
||||
SET_QMAN_LIODN(62), |
||||
SET_BMAN_LIODN(63), |
||||
#endif |
||||
|
||||
SET_SDHC_LIODN(1, 552), |
||||
|
||||
SET_USB_LIODN(1, "fsl-usb2-mph", 553), |
||||
SET_USB_LIODN(2, "fsl-usb2-dr", 554), |
||||
|
||||
SET_SATA_LIODN(1, 555), |
||||
|
||||
SET_PCI_LIODN_BASE(CONFIG_SYS_FSL_PCIE_COMPAT, 1, 148), |
||||
SET_PCI_LIODN_BASE(CONFIG_SYS_FSL_PCIE_COMPAT, 2, 228), |
||||
SET_PCI_LIODN_BASE(CONFIG_SYS_FSL_PCIE_COMPAT, 3, 308), |
||||
|
||||
SET_DMA_LIODN(1, 147), |
||||
SET_DMA_LIODN(2, 227), |
||||
/* SET_NEXUS_LIODN(557), -- not yet implemented */ |
||||
SET_QE_LIODN(559), |
||||
SET_TDM_LIODN(560), |
||||
}; |
||||
int liodn_tbl_sz = ARRAY_SIZE(liodn_tbl); |
||||
|
||||
#ifdef CONFIG_SYS_DPAA_FMAN |
||||
struct liodn_id_table fman1_liodn_tbl[] = { |
||||
SET_FMAN_RX_1G_LIODN(1, 0, 88), |
||||
SET_FMAN_RX_1G_LIODN(1, 1, 89), |
||||
SET_FMAN_RX_1G_LIODN(1, 2, 90), |
||||
SET_FMAN_RX_1G_LIODN(1, 3, 91), |
||||
SET_FMAN_RX_10G_LIODN(1, 0, 94), |
||||
}; |
||||
int fman1_liodn_tbl_sz = ARRAY_SIZE(fman1_liodn_tbl); |
||||
#endif |
||||
|
||||
struct liodn_id_table sec_liodn_tbl[] = { |
||||
SET_SEC_JR_LIODN_ENTRY(0, 454, 458), |
||||
SET_SEC_JR_LIODN_ENTRY(1, 455, 459), |
||||
SET_SEC_JR_LIODN_ENTRY(2, 456, 460), |
||||
SET_SEC_JR_LIODN_ENTRY(3, 457, 461), |
||||
SET_SEC_RTIC_LIODN_ENTRY(a, 453), |
||||
SET_SEC_RTIC_LIODN_ENTRY(b, 549), |
||||
SET_SEC_RTIC_LIODN_ENTRY(c, 550), |
||||
SET_SEC_RTIC_LIODN_ENTRY(d, 551), |
||||
SET_SEC_DECO_LIODN_ENTRY(0, 541, 610), |
||||
SET_SEC_DECO_LIODN_ENTRY(1, 542, 611), |
||||
}; |
||||
int sec_liodn_tbl_sz = ARRAY_SIZE(sec_liodn_tbl); |
||||
|
||||
struct liodn_id_table liodn_bases[] = { |
||||
[FSL_HW_PORTAL_SEC] = SET_LIODN_BASE_2(462, 558), |
||||
#ifdef CONFIG_SYS_DPAA_FMAN |
||||
[FSL_HW_PORTAL_FMAN1] = SET_LIODN_BASE_1(973), |
||||
#endif |
||||
}; |
@ -0,0 +1,52 @@ |
||||
/*
|
||||
* Copyright 2014 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <asm/fsl_serdes.h> |
||||
#include <asm/processor.h> |
||||
#include <asm/io.h> |
||||
|
||||
|
||||
static u8 serdes_cfg_tbl[][4] = { |
||||
[0xD5] = {QSGMII_FM1_A, PCIE3, PCIE2, PCIE1}, |
||||
[0xD6] = {QSGMII_FM1_A, PCIE3, PCIE2, SATA1}, |
||||
[0x95] = {XFI_FM1_MAC1, PCIE3, PCIE2, PCIE1}, |
||||
[0x99] = {XFI_FM1_MAC1, PCIE3, SGMII_FM1_DTSEC2, PCIE1}, |
||||
[0x46] = {PCIE1, PCIE1, PCIE2, SATA1}, |
||||
[0x47] = {PCIE1, PCIE1, PCIE2, SGMII_FM1_DTSEC1}, |
||||
[0x56] = {PCIE1, PCIE3, PCIE2, SATA1}, |
||||
[0x5A] = {PCIE1, PCIE3, SGMII_FM1_DTSEC2, SATA1}, |
||||
[0x5B] = {PCIE1, PCIE3, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC1}, |
||||
[0x6A] = {PCIE1, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC2, SATA1}, |
||||
[0x6B] = {PCIE1, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC1}, |
||||
[0x6F] = {PCIE1, SGMII_FM1_DTSEC3, SGMII_2500_FM1_DTSEC2, |
||||
SGMII_2500_FM1_DTSEC1}, |
||||
[0x77] = {PCIE1, SGMII_2500_FM1_DTSEC3, PCIE2, SGMII_FM1_DTSEC1}, |
||||
[0x7F] = {PCIE1, SGMII_2500_FM1_DTSEC3, SGMII_2500_FM1_DTSEC2, |
||||
SGMII_2500_FM1_DTSEC1}, |
||||
[0x119] = {AURORA, PCIE3, SGMII_FM1_DTSEC2, PCIE1}, |
||||
[0x135] = {AURORA, SGMII_2500_FM1_DTSEC3, PCIE2, PCIE1}, |
||||
}; |
||||
|
||||
enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane) |
||||
{ |
||||
return serdes_cfg_tbl[cfg][lane]; |
||||
} |
||||
|
||||
int is_serdes_prtcl_valid(int serdes, u32 prtcl) |
||||
{ |
||||
int i; |
||||
|
||||
if (prtcl >= ARRAY_SIZE(serdes_cfg_tbl)) |
||||
return 0; |
||||
|
||||
for (i = 0; i < 4; i++) { |
||||
if (serdes_cfg_tbl[prtcl][i] != NONE) |
||||
return 1; |
||||
} |
||||
|
||||
return 0; |
||||
} |
@ -0,0 +1,88 @@ |
||||
/* Copyright 2014 Freescale Semiconductor, Inc.
|
||||
* |
||||
* Shengzhou Liu <Shengzhou.Liu@freescale.com> |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <phy.h> |
||||
#include <fm_eth.h> |
||||
#include <asm/immap_85xx.h> |
||||
#include <asm/fsl_serdes.h> |
||||
|
||||
u32 port_to_devdisr[] = { |
||||
[FM1_DTSEC1] = FSL_CORENET_DEVDISR2_DTSEC1_1, |
||||
[FM1_DTSEC2] = FSL_CORENET_DEVDISR2_DTSEC1_2, |
||||
[FM1_DTSEC3] = FSL_CORENET_DEVDISR2_DTSEC1_3, |
||||
[FM1_DTSEC4] = FSL_CORENET_DEVDISR2_DTSEC1_4, |
||||
[FM1_10GEC1] = FSL_CORENET_DEVDISR2_10GEC1_1, /* MAC1 */ |
||||
}; |
||||
|
||||
static int is_device_disabled(enum fm_port port) |
||||
{ |
||||
ccsr_gur_t *gur = (void __iomem *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); |
||||
u32 devdisr2 = in_be32(&gur->devdisr2); |
||||
|
||||
return port_to_devdisr[port] & devdisr2; |
||||
} |
||||
|
||||
void fman_disable_port(enum fm_port port) |
||||
{ |
||||
ccsr_gur_t *gur = (void __iomem *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); |
||||
|
||||
setbits_be32(&gur->devdisr2, port_to_devdisr[port]); |
||||
} |
||||
|
||||
phy_interface_t fman_port_enet_if(enum fm_port port) |
||||
{ |
||||
ccsr_gur_t *gur = (void __iomem *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); |
||||
u32 rcwsr13 = in_be32(&gur->rcwsr[13]); |
||||
|
||||
if (is_device_disabled(port)) |
||||
return PHY_INTERFACE_MODE_NONE; |
||||
|
||||
if ((port == FM1_10GEC1) && (is_serdes_configured(XFI_FM1_MAC1))) |
||||
return PHY_INTERFACE_MODE_XGMII; |
||||
|
||||
if ((port == FM1_DTSEC3) && ((rcwsr13 & FSL_CORENET_RCWSR13_EC2) == |
||||
FSL_CORENET_RCWSR13_EC2_RGMII) && |
||||
(!is_serdes_configured(QSGMII_FM1_A))) |
||||
return PHY_INTERFACE_MODE_RGMII; |
||||
|
||||
if ((port == FM1_DTSEC4) && ((rcwsr13 & FSL_CORENET_RCWSR13_EC1) == |
||||
FSL_CORENET_RCWSR13_EC1_RGMII) && |
||||
(!is_serdes_configured(QSGMII_FM1_A))) |
||||
return PHY_INTERFACE_MODE_RGMII; |
||||
|
||||
/* handle SGMII */ |
||||
switch (port) { |
||||
case FM1_DTSEC1: |
||||
case FM1_DTSEC2: |
||||
case FM1_DTSEC3: |
||||
if (is_serdes_configured(SGMII_FM1_DTSEC1 + port - FM1_DTSEC1)) |
||||
return PHY_INTERFACE_MODE_SGMII; |
||||
else if (is_serdes_configured(SGMII_2500_FM1_DTSEC1 |
||||
+ port - FM1_DTSEC1)) |
||||
return PHY_INTERFACE_MODE_SGMII_2500; |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
|
||||
/* handle QSGMII */ |
||||
switch (port) { |
||||
case FM1_DTSEC1: |
||||
case FM1_DTSEC2: |
||||
case FM1_DTSEC3: |
||||
case FM1_DTSEC4: |
||||
/* check lane A on SerDes1 */ |
||||
if (is_serdes_configured(QSGMII_FM1_A)) |
||||
return PHY_INTERFACE_MODE_QSGMII; |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
|
||||
return PHY_INTERFACE_MODE_NONE; |
||||
} |
Loading…
Reference in new issue