powerpc/t1024rdb: Add support for T1024RDB-PB
T1024RDB-PB board adds 2.5G SGMII support with AQR105 PHY. rcw_0x095 is used for 10G XFI + 3x PCIex1 rcw_0x135 is used for 2.5G SGMII + 2x PCIex1 Signed-off-by: Shengzhou Liu <Shengzhou.Liu@freescale.com> Reviewed-by: York Sun <yorksun@freescale.com>
This commit is contained in:
parent
f49b8c1b5d
commit
e26416a3f1
@ -43,3 +43,7 @@ void cpld_write(unsigned int reg, u8 value);
|
|||||||
#define CPLD_LBMAP_RESET 0xFF
|
#define CPLD_LBMAP_RESET 0xFF
|
||||||
#define CPLD_LBMAP_SHIFT 0x03
|
#define CPLD_LBMAP_SHIFT 0x03
|
||||||
#define CPLD_BOOT_SEL 0x80
|
#define CPLD_BOOT_SEL 0x80
|
||||||
|
|
||||||
|
#define CPLD_PCIE_SGMII_MUX 0x80
|
||||||
|
#define CPLD_OVERRIDE_BOOT_EN 0x01
|
||||||
|
#define CPLD_OVERRIDE_MUX_EN 0x02 /* PCIE/2.5G-SGMII mux override enable */
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include <phy.h>
|
#include <phy.h>
|
||||||
#include <asm/fsl_dtsec.h>
|
#include <asm/fsl_dtsec.h>
|
||||||
#include <asm/fsl_serdes.h>
|
#include <asm/fsl_serdes.h>
|
||||||
|
#include "../common/fman.h"
|
||||||
|
|
||||||
int board_eth_init(bd_t *bis)
|
int board_eth_init(bd_t *bis)
|
||||||
{
|
{
|
||||||
@ -51,15 +52,22 @@ int board_eth_init(bd_t *bis)
|
|||||||
/* Register the 10G MDIO bus */
|
/* Register the 10G MDIO bus */
|
||||||
fm_memac_mdio_init(bis, &tgec_mdio_info);
|
fm_memac_mdio_init(bis, &tgec_mdio_info);
|
||||||
|
|
||||||
/* Set the two on-board RGMII PHY address */
|
/* Set the on-board RGMII PHY address */
|
||||||
fm_info_set_phy_address(FM1_DTSEC3, RGMII_PHY2_ADDR);
|
|
||||||
fm_info_set_phy_address(FM1_DTSEC4, RGMII_PHY1_ADDR);
|
fm_info_set_phy_address(FM1_DTSEC4, RGMII_PHY1_ADDR);
|
||||||
|
|
||||||
switch (srds_s1) {
|
switch (srds_s1) {
|
||||||
case 0x95:
|
case 0x95:
|
||||||
/* 10G XFI with Aquantia PHY */
|
/* set the on-board RGMII2 PHY */
|
||||||
|
fm_info_set_phy_address(FM1_DTSEC3, RGMII_PHY2_ADDR);
|
||||||
|
|
||||||
|
/* set 10G XFI with Aquantia AQR105 PHY */
|
||||||
fm_info_set_phy_address(FM1_10GEC1, FM1_10GEC1_PHY_ADDR);
|
fm_info_set_phy_address(FM1_10GEC1, FM1_10GEC1_PHY_ADDR);
|
||||||
break;
|
break;
|
||||||
|
case 0x77:
|
||||||
|
case 0x135:
|
||||||
|
/* set the on-board 2.5G SGMII AQR105 PHY */
|
||||||
|
fm_info_set_phy_address(FM1_DTSEC3, SGMII_PHY1_ADDR);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
printf("SerDes protocol 0x%x is not supported on T102xRDB\n",
|
printf("SerDes protocol 0x%x is not supported on T102xRDB\n",
|
||||||
srds_s1);
|
srds_s1);
|
||||||
@ -73,6 +81,10 @@ int board_eth_init(bd_t *bis)
|
|||||||
dev = miiphy_get_dev_by_name(DEFAULT_FM_MDIO_NAME);
|
dev = miiphy_get_dev_by_name(DEFAULT_FM_MDIO_NAME);
|
||||||
fm_info_set_mdio(i, dev);
|
fm_info_set_mdio(i, dev);
|
||||||
break;
|
break;
|
||||||
|
case PHY_INTERFACE_MODE_SGMII_2500:
|
||||||
|
dev = miiphy_get_dev_by_name(DEFAULT_FM_TGEC_MDIO_NAME);
|
||||||
|
fm_info_set_mdio(i, dev);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -95,6 +107,18 @@ int board_eth_init(bd_t *bis)
|
|||||||
return pci_eth_init(bis);
|
return pci_eth_init(bis);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void board_ft_fman_fixup_port(void *fdt, char *compat, phys_addr_t addr,
|
||||||
|
enum fm_port port, int offset)
|
||||||
|
{
|
||||||
|
if ((fm_info_get_enet_if(port) == PHY_INTERFACE_MODE_SGMII_2500) &&
|
||||||
|
(port == FM1_DTSEC3)) {
|
||||||
|
fdt_set_phy_handle(fdt, compat, addr, "sg_2500_aqr105_phy4");
|
||||||
|
fdt_setprop(fdt, offset, "phy-connection-type",
|
||||||
|
"sgmii-2500", 10);
|
||||||
|
fdt_status_disabled_by_alias(fdt, "xg_aqr105_phy3");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void fdt_fixup_board_enet(void *fdt)
|
void fdt_fixup_board_enet(void *fdt)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,11 @@ int checkboard(void)
|
|||||||
{
|
{
|
||||||
struct cpu_type *cpu = gd->arch.cpu;
|
struct cpu_type *cpu = gd->arch.cpu;
|
||||||
static const char *freq[3] = {"100.00MHZ", "125.00MHz", "156.25MHZ"};
|
static const char *freq[3] = {"100.00MHZ", "125.00MHz", "156.25MHZ"};
|
||||||
|
ccsr_gur_t __iomem *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
|
||||||
|
u32 srds_s1;
|
||||||
|
|
||||||
|
srds_s1 = in_be32(&gur->rcwsr[4]) & FSL_CORENET2_RCWSR4_SRDS1_PRTCL;
|
||||||
|
srds_s1 >>= FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT;
|
||||||
|
|
||||||
printf("Board: %sRDB, ", cpu->name);
|
printf("Board: %sRDB, ", cpu->name);
|
||||||
printf("Board rev: 0x%02x CPLD ver: 0x%02x, boot from ",
|
printf("Board rev: 0x%02x CPLD ver: 0x%02x, boot from ",
|
||||||
@ -50,11 +55,34 @@ int checkboard(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
puts("SERDES Reference Clocks:\n");
|
puts("SERDES Reference Clocks:\n");
|
||||||
printf("SD1_CLK1=%s, SD1_CLK2=%s\n", freq[2], freq[0]);
|
if (srds_s1 == 0x95)
|
||||||
|
printf("SD1_CLK1=%s, SD1_CLK2=%s\n", freq[2], freq[0]);
|
||||||
|
else
|
||||||
|
printf("SD1_CLK1=%s, SD1_CLK2=%s\n", freq[0], freq[0]);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void board_mux_lane(void)
|
||||||
|
{
|
||||||
|
ccsr_gur_t __iomem *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
|
||||||
|
u32 srds_prtcl_s1;
|
||||||
|
u8 reg = CPLD_READ(misc_ctl_status);
|
||||||
|
|
||||||
|
srds_prtcl_s1 = in_be32(&gur->rcwsr[4]) &
|
||||||
|
FSL_CORENET2_RCWSR4_SRDS1_PRTCL;
|
||||||
|
srds_prtcl_s1 >>= FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT;
|
||||||
|
|
||||||
|
if (srds_prtcl_s1 == 0x95) {
|
||||||
|
/* Route Lane B to PCIE */
|
||||||
|
CPLD_WRITE(misc_ctl_status, reg & ~CPLD_PCIE_SGMII_MUX);
|
||||||
|
} else {
|
||||||
|
/* Route Lane B to SGMII */
|
||||||
|
CPLD_WRITE(misc_ctl_status, reg | CPLD_PCIE_SGMII_MUX);
|
||||||
|
}
|
||||||
|
CPLD_WRITE(boot_override, CPLD_OVERRIDE_MUX_EN);
|
||||||
|
}
|
||||||
|
|
||||||
int board_early_init_f(void)
|
int board_early_init_f(void)
|
||||||
{
|
{
|
||||||
#if defined(CONFIG_DEEP_SLEEP)
|
#if defined(CONFIG_DEEP_SLEEP)
|
||||||
@ -96,6 +124,7 @@ int board_early_init_r(void)
|
|||||||
#ifdef CONFIG_SYS_DPAA_QBMAN
|
#ifdef CONFIG_SYS_DPAA_QBMAN
|
||||||
setup_portals();
|
setup_portals();
|
||||||
#endif
|
#endif
|
||||||
|
board_mux_lane();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -762,8 +762,10 @@ unsigned long get_board_ddr_clk(void);
|
|||||||
#define CONFIG_FMAN_ENET
|
#define CONFIG_FMAN_ENET
|
||||||
#define CONFIG_PHYLIB_10G
|
#define CONFIG_PHYLIB_10G
|
||||||
#define CONFIG_PHY_REALTEK
|
#define CONFIG_PHY_REALTEK
|
||||||
|
#define CONFIG_PHY_AQUANTIA
|
||||||
#define RGMII_PHY1_ADDR 0x2
|
#define RGMII_PHY1_ADDR 0x2
|
||||||
#define RGMII_PHY2_ADDR 0x6
|
#define RGMII_PHY2_ADDR 0x6
|
||||||
|
#define SGMII_PHY1_ADDR 0x2
|
||||||
#define FM1_10GEC1_PHY_ADDR 0x1
|
#define FM1_10GEC1_PHY_ADDR 0x1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user