This patch add support of LS1088AQDS platform. The LS1088A QorIQTM Development System (QDS) is a high-performance computing, evaluation, and development platform that supports the LS1088A QorIQ Architecture processor. Signed-off-by: Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com> Signed-off-by: Shaohui Xie <Shaohui.Xie@nxp.com> Signed-off-by: Ashish Kumar <Ashish.Kumar@nxp.com> Reviewed-by: York Sun <york.sun@nxp.com>master
parent
e84a324ba7
commit
7769776a60
@ -0,0 +1,70 @@ |
|||||||
|
/* |
||||||
|
* NXP ls1088a QDS board device tree source |
||||||
|
* |
||||||
|
* Copyright 2017 NXP |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ |
||||||
|
*/ |
||||||
|
|
||||||
|
/dts-v1/; |
||||||
|
|
||||||
|
#include "fsl-ls1088a.dtsi" |
||||||
|
|
||||||
|
/ { |
||||||
|
model = "NXP Layerscape 1088a QDS Board"; |
||||||
|
compatible = "fsl,ls1088a-qds", "fsl,ls1088a"; |
||||||
|
aliases { |
||||||
|
spi0 = &qspi; |
||||||
|
spi1 = &dspi; |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
&dspi { |
||||||
|
bus-num = <0>; |
||||||
|
status = "okay"; |
||||||
|
|
||||||
|
dflash0: n25q128a { |
||||||
|
#address-cells = <1>; |
||||||
|
#size-cells = <1>; |
||||||
|
compatible = "spi-flash"; |
||||||
|
reg = <0>; |
||||||
|
spi-max-frequency = <1000000>; /* input clock */ |
||||||
|
}; |
||||||
|
|
||||||
|
dflash1: sst25wf040b { |
||||||
|
#address-cells = <1>; |
||||||
|
#size-cells = <1>; |
||||||
|
compatible = "spi-flash"; |
||||||
|
spi-max-frequency = <3500000>; |
||||||
|
reg = <1>; |
||||||
|
}; |
||||||
|
|
||||||
|
dflash2: en25s64 { |
||||||
|
#address-cells = <1>; |
||||||
|
#size-cells = <1>; |
||||||
|
compatible = "spi-flash"; |
||||||
|
spi-max-frequency = <3500000>; |
||||||
|
reg = <2>; |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
&qspi { |
||||||
|
bus-num = <0>; |
||||||
|
status = "okay"; |
||||||
|
|
||||||
|
qflash0: s25fs512s@0 { |
||||||
|
#address-cells = <1>; |
||||||
|
#size-cells = <1>; |
||||||
|
compatible = "spi-flash"; |
||||||
|
spi-max-frequency = <50000000>; |
||||||
|
reg = <0>; |
||||||
|
}; |
||||||
|
|
||||||
|
qflash1: s25fs512s@1 { |
||||||
|
#address-cells = <1>; |
||||||
|
#size-cells = <1>; |
||||||
|
compatible = "spi-flash"; |
||||||
|
spi-max-frequency = <50000000>; |
||||||
|
reg = <1>; |
||||||
|
}; |
||||||
|
}; |
@ -0,0 +1,650 @@ |
|||||||
|
/*
|
||||||
|
* Copyright 2017 NXP |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <common.h> |
||||||
|
#include <netdev.h> |
||||||
|
#include <asm/io.h> |
||||||
|
#include <asm/arch/fsl_serdes.h> |
||||||
|
#include <hwconfig.h> |
||||||
|
#include <fsl_mdio.h> |
||||||
|
#include <malloc.h> |
||||||
|
#include <fm_eth.h> |
||||||
|
#include <i2c.h> |
||||||
|
#include <miiphy.h> |
||||||
|
#include <fsl-mc/ldpaa_wriop.h> |
||||||
|
|
||||||
|
#include "../common/qixis.h" |
||||||
|
|
||||||
|
#include "ls1088a_qixis.h" |
||||||
|
|
||||||
|
#define MC_BOOT_ENV_VAR "mcinitcmd" |
||||||
|
|
||||||
|
#ifdef CONFIG_FSL_MC_ENET |
||||||
|
|
||||||
|
#define SFP_TX 0 |
||||||
|
|
||||||
|
/* - In LS1088A A there are only 16 SERDES lanes, spread across 2 SERDES banks.
|
||||||
|
* Bank 1 -> Lanes A, B, C, D, |
||||||
|
* Bank 2 -> Lanes A,B, C, D, |
||||||
|
*/ |
||||||
|
|
||||||
|
/* Mapping of 8 SERDES lanes to LS1088A QDS board slots. A value of '0' here
|
||||||
|
* means that the mapping must be determined dynamically, or that the lane |
||||||
|
* maps to something other than a board slot. |
||||||
|
*/ |
||||||
|
|
||||||
|
static u8 lane_to_slot_fsm1[] = { |
||||||
|
0, 0, 0, 0, 0, 0, 0, 0 |
||||||
|
}; |
||||||
|
|
||||||
|
/* On the Vitesse VSC8234XHG SGMII riser card there are 4 SGMII PHYs
|
||||||
|
* housed. |
||||||
|
*/ |
||||||
|
|
||||||
|
static int xqsgii_riser_phy_addr[] = { |
||||||
|
XQSGMII_CARD_PHY1_PORT0_ADDR, |
||||||
|
XQSGMII_CARD_PHY2_PORT0_ADDR, |
||||||
|
XQSGMII_CARD_PHY3_PORT0_ADDR, |
||||||
|
XQSGMII_CARD_PHY4_PORT0_ADDR, |
||||||
|
XQSGMII_CARD_PHY3_PORT2_ADDR, |
||||||
|
XQSGMII_CARD_PHY1_PORT2_ADDR, |
||||||
|
XQSGMII_CARD_PHY4_PORT2_ADDR, |
||||||
|
XQSGMII_CARD_PHY2_PORT2_ADDR, |
||||||
|
}; |
||||||
|
|
||||||
|
static int sgmii_riser_phy_addr[] = { |
||||||
|
SGMII_CARD_PORT1_PHY_ADDR, |
||||||
|
SGMII_CARD_PORT2_PHY_ADDR, |
||||||
|
SGMII_CARD_PORT3_PHY_ADDR, |
||||||
|
SGMII_CARD_PORT4_PHY_ADDR, |
||||||
|
}; |
||||||
|
|
||||||
|
/* Slot2 does not have EMI connections */ |
||||||
|
#define EMI_NONE 0xFF |
||||||
|
#define EMI1_RGMII1 0 |
||||||
|
#define EMI1_RGMII2 1 |
||||||
|
#define EMI1_SLOT1 2 |
||||||
|
|
||||||
|
static const char * const mdio_names[] = { |
||||||
|
"LS1088A_QDS_MDIO0", |
||||||
|
"LS1088A_QDS_MDIO1", |
||||||
|
"LS1088A_QDS_MDIO2", |
||||||
|
DEFAULT_WRIOP_MDIO2_NAME, |
||||||
|
}; |
||||||
|
|
||||||
|
struct ls1088a_qds_mdio { |
||||||
|
u8 muxval; |
||||||
|
struct mii_dev *realbus; |
||||||
|
}; |
||||||
|
|
||||||
|
static void sgmii_configure_repeater(int dpmac) |
||||||
|
{ |
||||||
|
struct mii_dev *bus; |
||||||
|
uint8_t a = 0xf; |
||||||
|
int i, j, ret; |
||||||
|
unsigned short value; |
||||||
|
const char *dev = "LS1088A_QDS_MDIO2"; |
||||||
|
int i2c_addr[] = {0x58, 0x59, 0x5a, 0x5b}; |
||||||
|
int i2c_phy_addr = 0; |
||||||
|
int phy_addr = 0; |
||||||
|
|
||||||
|
uint8_t ch_a_eq[] = {0x1, 0x2, 0x3, 0x7}; |
||||||
|
uint8_t ch_a_ctl2[] = {0x81, 0x82, 0x83, 0x84}; |
||||||
|
uint8_t ch_b_eq[] = {0x1, 0x2, 0x3, 0x7}; |
||||||
|
uint8_t ch_b_ctl2[] = {0x81, 0x82, 0x83, 0x84}; |
||||||
|
|
||||||
|
/* Set I2c to Slot 1 */ |
||||||
|
i2c_write(0x77, 0, 0, &a, 1); |
||||||
|
|
||||||
|
switch (dpmac) { |
||||||
|
case 1: |
||||||
|
i2c_phy_addr = i2c_addr[1]; |
||||||
|
phy_addr = 4; |
||||||
|
break; |
||||||
|
case 2: |
||||||
|
i2c_phy_addr = i2c_addr[0]; |
||||||
|
phy_addr = 0; |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
i2c_phy_addr = i2c_addr[3]; |
||||||
|
phy_addr = 0xc; |
||||||
|
break; |
||||||
|
case 7: |
||||||
|
i2c_phy_addr = i2c_addr[2]; |
||||||
|
phy_addr = 8; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
/* Check the PHY status */ |
||||||
|
ret = miiphy_set_current_dev(dev); |
||||||
|
if (ret > 0) |
||||||
|
goto error; |
||||||
|
|
||||||
|
bus = mdio_get_current_dev(); |
||||||
|
debug("Reading from bus %s\n", bus->name); |
||||||
|
|
||||||
|
ret = miiphy_write(dev, phy_addr, 0x1f, 3); |
||||||
|
if (ret > 0) |
||||||
|
goto error; |
||||||
|
|
||||||
|
mdelay(10); |
||||||
|
ret = miiphy_read(dev, phy_addr, 0x11, &value); |
||||||
|
if (ret > 0) |
||||||
|
goto error; |
||||||
|
|
||||||
|
mdelay(10); |
||||||
|
|
||||||
|
if ((value & 0xfff) == 0x401) { |
||||||
|
miiphy_write(dev, phy_addr, 0x1f, 0); |
||||||
|
printf("DPMAC %d:PHY is ..... Configured\n", dpmac); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
for (i = 0; i < 4; i++) { |
||||||
|
for (j = 0; j < 4; j++) { |
||||||
|
a = 0x18; |
||||||
|
i2c_write(i2c_phy_addr, 6, 1, &a, 1); |
||||||
|
a = 0x38; |
||||||
|
i2c_write(i2c_phy_addr, 4, 1, &a, 1); |
||||||
|
a = 0x4; |
||||||
|
i2c_write(i2c_phy_addr, 8, 1, &a, 1); |
||||||
|
|
||||||
|
i2c_write(i2c_phy_addr, 0xf, 1, |
||||||
|
&ch_a_eq[i], 1); |
||||||
|
i2c_write(i2c_phy_addr, 0x11, 1, |
||||||
|
&ch_a_ctl2[j], 1); |
||||||
|
|
||||||
|
i2c_write(i2c_phy_addr, 0x16, 1, |
||||||
|
&ch_b_eq[i], 1); |
||||||
|
i2c_write(i2c_phy_addr, 0x18, 1, |
||||||
|
&ch_b_ctl2[j], 1); |
||||||
|
|
||||||
|
a = 0x14; |
||||||
|
i2c_write(i2c_phy_addr, 0x23, 1, &a, 1); |
||||||
|
a = 0xb5; |
||||||
|
i2c_write(i2c_phy_addr, 0x2d, 1, &a, 1); |
||||||
|
a = 0x20; |
||||||
|
i2c_write(i2c_phy_addr, 4, 1, &a, 1); |
||||||
|
mdelay(100); |
||||||
|
ret = miiphy_read(dev, phy_addr, 0x11, &value); |
||||||
|
if (ret > 0) |
||||||
|
goto error; |
||||||
|
|
||||||
|
mdelay(100); |
||||||
|
ret = miiphy_read(dev, phy_addr, 0x11, &value); |
||||||
|
if (ret > 0) |
||||||
|
goto error; |
||||||
|
|
||||||
|
if ((value & 0xfff) == 0x401) { |
||||||
|
printf("DPMAC %d :PHY is configured ", |
||||||
|
dpmac); |
||||||
|
printf("after setting repeater 0x%x\n", |
||||||
|
value); |
||||||
|
i = 5; |
||||||
|
j = 5; |
||||||
|
} else { |
||||||
|
printf("DPMAC %d :PHY is failed to ", |
||||||
|
dpmac); |
||||||
|
printf("configure the repeater 0x%x\n", value); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
miiphy_write(dev, phy_addr, 0x1f, 0); |
||||||
|
error: |
||||||
|
if (ret) |
||||||
|
printf("DPMAC %d ..... FAILED to configure PHY\n", dpmac); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
static void qsgmii_configure_repeater(int dpmac) |
||||||
|
{ |
||||||
|
uint8_t a = 0xf; |
||||||
|
int i, j; |
||||||
|
int i2c_phy_addr = 0; |
||||||
|
int phy_addr = 0; |
||||||
|
int i2c_addr[] = {0x58, 0x59, 0x5a, 0x5b}; |
||||||
|
|
||||||
|
uint8_t ch_a_eq[] = {0x1, 0x2, 0x3, 0x7}; |
||||||
|
uint8_t ch_a_ctl2[] = {0x81, 0x82, 0x83, 0x84}; |
||||||
|
uint8_t ch_b_eq[] = {0x1, 0x2, 0x3, 0x7}; |
||||||
|
uint8_t ch_b_ctl2[] = {0x81, 0x82, 0x83, 0x84}; |
||||||
|
|
||||||
|
const char *dev = mdio_names[EMI1_SLOT1]; |
||||||
|
int ret = 0; |
||||||
|
unsigned short value; |
||||||
|
|
||||||
|
/* Set I2c to Slot 1 */ |
||||||
|
i2c_write(0x77, 0, 0, &a, 1); |
||||||
|
|
||||||
|
switch (dpmac) { |
||||||
|
case 7: |
||||||
|
case 8: |
||||||
|
case 9: |
||||||
|
case 10: |
||||||
|
i2c_phy_addr = i2c_addr[2]; |
||||||
|
phy_addr = 8; |
||||||
|
break; |
||||||
|
|
||||||
|
case 3: |
||||||
|
case 4: |
||||||
|
case 5: |
||||||
|
case 6: |
||||||
|
i2c_phy_addr = i2c_addr[3]; |
||||||
|
phy_addr = 0xc; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
/* Check the PHY status */ |
||||||
|
ret = miiphy_set_current_dev(dev); |
||||||
|
ret = miiphy_write(dev, phy_addr, 0x1f, 3); |
||||||
|
mdelay(10); |
||||||
|
ret = miiphy_read(dev, phy_addr, 0x11, &value); |
||||||
|
mdelay(10); |
||||||
|
ret = miiphy_read(dev, phy_addr, 0x11, &value); |
||||||
|
mdelay(10); |
||||||
|
if ((value & 0xf) == 0xf) { |
||||||
|
miiphy_write(dev, phy_addr, 0x1f, 0); |
||||||
|
printf("DPMAC %d :PHY is ..... Configured\n", dpmac); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
for (i = 0; i < 4; i++) { |
||||||
|
for (j = 0; j < 4; j++) { |
||||||
|
a = 0x18; |
||||||
|
i2c_write(i2c_phy_addr, 6, 1, &a, 1); |
||||||
|
a = 0x38; |
||||||
|
i2c_write(i2c_phy_addr, 4, 1, &a, 1); |
||||||
|
a = 0x4; |
||||||
|
i2c_write(i2c_phy_addr, 8, 1, &a, 1); |
||||||
|
|
||||||
|
i2c_write(i2c_phy_addr, 0xf, 1, &ch_a_eq[i], 1); |
||||||
|
i2c_write(i2c_phy_addr, 0x11, 1, &ch_a_ctl2[j], 1); |
||||||
|
|
||||||
|
i2c_write(i2c_phy_addr, 0x16, 1, &ch_b_eq[i], 1); |
||||||
|
i2c_write(i2c_phy_addr, 0x18, 1, &ch_b_ctl2[j], 1); |
||||||
|
|
||||||
|
a = 0x14; |
||||||
|
i2c_write(i2c_phy_addr, 0x23, 1, &a, 1); |
||||||
|
a = 0xb5; |
||||||
|
i2c_write(i2c_phy_addr, 0x2d, 1, &a, 1); |
||||||
|
a = 0x20; |
||||||
|
i2c_write(i2c_phy_addr, 4, 1, &a, 1); |
||||||
|
mdelay(100); |
||||||
|
ret = miiphy_read(dev, phy_addr, 0x11, &value); |
||||||
|
if (ret > 0) |
||||||
|
goto error; |
||||||
|
mdelay(1); |
||||||
|
ret = miiphy_read(dev, phy_addr, 0x11, &value); |
||||||
|
if (ret > 0) |
||||||
|
goto error; |
||||||
|
mdelay(10); |
||||||
|
if ((value & 0xf) == 0xf) { |
||||||
|
miiphy_write(dev, phy_addr, 0x1f, 0); |
||||||
|
printf("DPMAC %d :PHY is ..... Configured\n", |
||||||
|
dpmac); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
error: |
||||||
|
printf("DPMAC %d :PHY ..... FAILED to configure PHY\n", dpmac); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
static const char *ls1088a_qds_mdio_name_for_muxval(u8 muxval) |
||||||
|
{ |
||||||
|
return mdio_names[muxval]; |
||||||
|
} |
||||||
|
|
||||||
|
struct mii_dev *mii_dev_for_muxval(u8 muxval) |
||||||
|
{ |
||||||
|
struct mii_dev *bus; |
||||||
|
const char *name = ls1088a_qds_mdio_name_for_muxval(muxval); |
||||||
|
|
||||||
|
if (!name) { |
||||||
|
printf("No bus for muxval %x\n", muxval); |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
bus = miiphy_get_dev_by_name(name); |
||||||
|
|
||||||
|
if (!bus) { |
||||||
|
printf("No bus by name %s\n", name); |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
return bus; |
||||||
|
} |
||||||
|
|
||||||
|
static void ls1088a_qds_enable_SFP_TX(u8 muxval) |
||||||
|
{ |
||||||
|
u8 brdcfg9; |
||||||
|
|
||||||
|
brdcfg9 = QIXIS_READ(brdcfg[9]); |
||||||
|
brdcfg9 &= ~BRDCFG9_SFPTX_MASK; |
||||||
|
brdcfg9 |= (muxval << BRDCFG9_SFPTX_SHIFT); |
||||||
|
QIXIS_WRITE(brdcfg[9], brdcfg9); |
||||||
|
} |
||||||
|
|
||||||
|
static void ls1088a_qds_mux_mdio(u8 muxval) |
||||||
|
{ |
||||||
|
u8 brdcfg4; |
||||||
|
|
||||||
|
if (muxval <= 5) { |
||||||
|
brdcfg4 = QIXIS_READ(brdcfg[4]); |
||||||
|
brdcfg4 &= ~BRDCFG4_EMISEL_MASK; |
||||||
|
brdcfg4 |= (muxval << BRDCFG4_EMISEL_SHIFT); |
||||||
|
QIXIS_WRITE(brdcfg[4], brdcfg4); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static int ls1088a_qds_mdio_read(struct mii_dev *bus, int addr, |
||||||
|
int devad, int regnum) |
||||||
|
{ |
||||||
|
struct ls1088a_qds_mdio *priv = bus->priv; |
||||||
|
|
||||||
|
ls1088a_qds_mux_mdio(priv->muxval); |
||||||
|
|
||||||
|
return priv->realbus->read(priv->realbus, addr, devad, regnum); |
||||||
|
} |
||||||
|
|
||||||
|
static int ls1088a_qds_mdio_write(struct mii_dev *bus, int addr, int devad, |
||||||
|
int regnum, u16 value) |
||||||
|
{ |
||||||
|
struct ls1088a_qds_mdio *priv = bus->priv; |
||||||
|
|
||||||
|
ls1088a_qds_mux_mdio(priv->muxval); |
||||||
|
|
||||||
|
return priv->realbus->write(priv->realbus, addr, devad, regnum, value); |
||||||
|
} |
||||||
|
|
||||||
|
static int ls1088a_qds_mdio_reset(struct mii_dev *bus) |
||||||
|
{ |
||||||
|
struct ls1088a_qds_mdio *priv = bus->priv; |
||||||
|
|
||||||
|
return priv->realbus->reset(priv->realbus); |
||||||
|
} |
||||||
|
|
||||||
|
static int ls1088a_qds_mdio_init(char *realbusname, u8 muxval) |
||||||
|
{ |
||||||
|
struct ls1088a_qds_mdio *pmdio; |
||||||
|
struct mii_dev *bus = mdio_alloc(); |
||||||
|
|
||||||
|
if (!bus) { |
||||||
|
printf("Failed to allocate ls1088a_qds MDIO bus\n"); |
||||||
|
return -1; |
||||||
|
} |
||||||
|
|
||||||
|
pmdio = malloc(sizeof(*pmdio)); |
||||||
|
if (!pmdio) { |
||||||
|
printf("Failed to allocate ls1088a_qds private data\n"); |
||||||
|
free(bus); |
||||||
|
return -1; |
||||||
|
} |
||||||
|
|
||||||
|
bus->read = ls1088a_qds_mdio_read; |
||||||
|
bus->write = ls1088a_qds_mdio_write; |
||||||
|
bus->reset = ls1088a_qds_mdio_reset; |
||||||
|
sprintf(bus->name, ls1088a_qds_mdio_name_for_muxval(muxval)); |
||||||
|
|
||||||
|
pmdio->realbus = miiphy_get_dev_by_name(realbusname); |
||||||
|
|
||||||
|
if (!pmdio->realbus) { |
||||||
|
printf("No bus with name %s\n", realbusname); |
||||||
|
free(bus); |
||||||
|
free(pmdio); |
||||||
|
return -1; |
||||||
|
} |
||||||
|
|
||||||
|
pmdio->muxval = muxval; |
||||||
|
bus->priv = pmdio; |
||||||
|
|
||||||
|
return mdio_register(bus); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the dpmac_info array. |
||||||
|
* |
||||||
|
*/ |
||||||
|
static void initialize_dpmac_to_slot(void) |
||||||
|
{ |
||||||
|
struct ccsr_gur __iomem *gur = (void *)CONFIG_SYS_FSL_GUTS_ADDR; |
||||||
|
u32 serdes1_prtcl, cfg; |
||||||
|
|
||||||
|
cfg = in_le32(&gur->rcwsr[FSL_CHASSIS3_SRDS1_REGSR - 1]) & |
||||||
|
FSL_CHASSIS3_SRDS1_PRTCL_MASK; |
||||||
|
cfg >>= FSL_CHASSIS3_SRDS1_PRTCL_SHIFT; |
||||||
|
serdes1_prtcl = serdes_get_number(FSL_SRDS_1, cfg); |
||||||
|
|
||||||
|
switch (serdes1_prtcl) { |
||||||
|
case 0x12: |
||||||
|
printf("qds: WRIOP: Supported SerDes1 Protocol 0x%02x\n", |
||||||
|
serdes1_prtcl); |
||||||
|
lane_to_slot_fsm1[0] = EMI1_SLOT1 - 1; |
||||||
|
lane_to_slot_fsm1[1] = EMI1_SLOT1 - 1; |
||||||
|
lane_to_slot_fsm1[2] = EMI1_SLOT1 - 1; |
||||||
|
lane_to_slot_fsm1[3] = EMI1_SLOT1 - 1; |
||||||
|
break; |
||||||
|
case 0x15: |
||||||
|
case 0x1D: |
||||||
|
printf("qds: WRIOP: Supported SerDes1 Protocol 0x%02x\n", |
||||||
|
serdes1_prtcl); |
||||||
|
lane_to_slot_fsm1[0] = EMI1_SLOT1 - 1; |
||||||
|
lane_to_slot_fsm1[1] = EMI1_SLOT1 - 1; |
||||||
|
lane_to_slot_fsm1[2] = EMI_NONE; |
||||||
|
lane_to_slot_fsm1[3] = EMI_NONE; |
||||||
|
break; |
||||||
|
case 0x1E: |
||||||
|
printf("qds: WRIOP: Supported SerDes1 Protocol 0x%02x\n", |
||||||
|
serdes1_prtcl); |
||||||
|
lane_to_slot_fsm1[0] = EMI1_SLOT1 - 1; |
||||||
|
lane_to_slot_fsm1[1] = EMI1_SLOT1 - 1; |
||||||
|
lane_to_slot_fsm1[2] = EMI1_SLOT1 - 1; |
||||||
|
lane_to_slot_fsm1[3] = EMI_NONE; |
||||||
|
break; |
||||||
|
case 0x3A: |
||||||
|
printf("qds: WRIOP: Supported SerDes1 Protocol 0x%02x\n", |
||||||
|
serdes1_prtcl); |
||||||
|
lane_to_slot_fsm1[0] = EMI1_SLOT1 - 1; |
||||||
|
lane_to_slot_fsm1[1] = EMI_NONE; |
||||||
|
lane_to_slot_fsm1[2] = EMI1_SLOT1 - 1; |
||||||
|
lane_to_slot_fsm1[3] = EMI1_SLOT1 - 1; |
||||||
|
break; |
||||||
|
|
||||||
|
default: |
||||||
|
printf("%s qds: WRIOP: Unsupported SerDes1 Protocol 0x%02x\n", |
||||||
|
__func__, serdes1_prtcl); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void ls1088a_handle_phy_interface_sgmii(int dpmac_id) |
||||||
|
{ |
||||||
|
struct mii_dev *bus; |
||||||
|
struct ccsr_gur __iomem *gur = (void *)CONFIG_SYS_FSL_GUTS_ADDR; |
||||||
|
u32 serdes1_prtcl, cfg; |
||||||
|
|
||||||
|
cfg = in_le32(&gur->rcwsr[FSL_CHASSIS3_SRDS1_REGSR - 1]) & |
||||||
|
FSL_CHASSIS3_SRDS1_PRTCL_MASK; |
||||||
|
cfg >>= FSL_CHASSIS3_SRDS1_PRTCL_SHIFT; |
||||||
|
serdes1_prtcl = serdes_get_number(FSL_SRDS_1, cfg); |
||||||
|
|
||||||
|
int *riser_phy_addr; |
||||||
|
char *env_hwconfig = env_get("hwconfig"); |
||||||
|
|
||||||
|
if (hwconfig_f("xqsgmii", env_hwconfig)) |
||||||
|
riser_phy_addr = &xqsgii_riser_phy_addr[0]; |
||||||
|
else |
||||||
|
riser_phy_addr = &sgmii_riser_phy_addr[0]; |
||||||
|
|
||||||
|
switch (serdes1_prtcl) { |
||||||
|
case 0x12: |
||||||
|
case 0x15: |
||||||
|
case 0x1E: |
||||||
|
case 0x3A: |
||||||
|
switch (dpmac_id) { |
||||||
|
case 1: |
||||||
|
wriop_set_phy_address(dpmac_id, riser_phy_addr[1]); |
||||||
|
break; |
||||||
|
case 2: |
||||||
|
wriop_set_phy_address(dpmac_id, riser_phy_addr[0]); |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
wriop_set_phy_address(dpmac_id, riser_phy_addr[3]); |
||||||
|
break; |
||||||
|
case 7: |
||||||
|
wriop_set_phy_address(dpmac_id, riser_phy_addr[2]); |
||||||
|
break; |
||||||
|
default: |
||||||
|
printf("WRIOP: Wrong DPMAC%d set to SGMII", dpmac_id); |
||||||
|
break; |
||||||
|
} |
||||||
|
break; |
||||||
|
default: |
||||||
|
printf("%s qds: WRIOP: Unsupported SerDes1 Protocol 0x%02x\n", |
||||||
|
__func__, serdes1_prtcl); |
||||||
|
return; |
||||||
|
} |
||||||
|
dpmac_info[dpmac_id].board_mux = EMI1_SLOT1; |
||||||
|
bus = mii_dev_for_muxval(EMI1_SLOT1); |
||||||
|
wriop_set_mdio(dpmac_id, bus); |
||||||
|
} |
||||||
|
|
||||||
|
void ls1088a_handle_phy_interface_qsgmii(int dpmac_id) |
||||||
|
{ |
||||||
|
struct mii_dev *bus; |
||||||
|
struct ccsr_gur __iomem *gur = (void *)CONFIG_SYS_FSL_GUTS_ADDR; |
||||||
|
u32 serdes1_prtcl, cfg; |
||||||
|
|
||||||
|
cfg = in_le32(&gur->rcwsr[FSL_CHASSIS3_SRDS1_REGSR - 1]) & |
||||||
|
FSL_CHASSIS3_SRDS1_PRTCL_MASK; |
||||||
|
cfg >>= FSL_CHASSIS3_SRDS1_PRTCL_SHIFT; |
||||||
|
serdes1_prtcl = serdes_get_number(FSL_SRDS_1, cfg); |
||||||
|
|
||||||
|
switch (serdes1_prtcl) { |
||||||
|
case 0x1D: |
||||||
|
case 0x1E: |
||||||
|
switch (dpmac_id) { |
||||||
|
case 3: |
||||||
|
case 4: |
||||||
|
case 5: |
||||||
|
case 6: |
||||||
|
wriop_set_phy_address(dpmac_id, dpmac_id + 9); |
||||||
|
break; |
||||||
|
case 7: |
||||||
|
case 8: |
||||||
|
case 9: |
||||||
|
case 10: |
||||||
|
wriop_set_phy_address(dpmac_id, dpmac_id + 1); |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
dpmac_info[dpmac_id].board_mux = EMI1_SLOT1; |
||||||
|
bus = mii_dev_for_muxval(EMI1_SLOT1); |
||||||
|
wriop_set_mdio(dpmac_id, bus); |
||||||
|
break; |
||||||
|
default: |
||||||
|
printf("qds: WRIOP: Unsupported SerDes Protocol 0x%02x\n", |
||||||
|
serdes1_prtcl); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void ls1088a_handle_phy_interface_xsgmii(int i) |
||||||
|
{ |
||||||
|
struct ccsr_gur __iomem *gur = (void *)CONFIG_SYS_FSL_GUTS_ADDR; |
||||||
|
u32 serdes1_prtcl, cfg; |
||||||
|
|
||||||
|
cfg = in_le32(&gur->rcwsr[FSL_CHASSIS3_SRDS1_REGSR - 1]) & |
||||||
|
FSL_CHASSIS3_SRDS1_PRTCL_MASK; |
||||||
|
cfg >>= FSL_CHASSIS3_SRDS1_PRTCL_SHIFT; |
||||||
|
serdes1_prtcl = serdes_get_number(FSL_SRDS_1, cfg); |
||||||
|
|
||||||
|
switch (serdes1_prtcl) { |
||||||
|
case 0x15: |
||||||
|
case 0x1D: |
||||||
|
case 0x1E: |
||||||
|
wriop_set_phy_address(i, i + 26); |
||||||
|
ls1088a_qds_enable_SFP_TX(SFP_TX); |
||||||
|
break; |
||||||
|
default: |
||||||
|
printf("qds: WRIOP: Unsupported SerDes Protocol 0x%02x\n", |
||||||
|
serdes1_prtcl); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
int board_eth_init(bd_t *bis) |
||||||
|
{ |
||||||
|
int error = 0, i; |
||||||
|
char *mc_boot_env_var; |
||||||
|
#ifdef CONFIG_FSL_MC_ENET |
||||||
|
struct memac_mdio_info *memac_mdio0_info; |
||||||
|
char *env_hwconfig = env_get("hwconfig"); |
||||||
|
|
||||||
|
initialize_dpmac_to_slot(); |
||||||
|
|
||||||
|
memac_mdio0_info = (struct memac_mdio_info *)malloc( |
||||||
|
sizeof(struct memac_mdio_info)); |
||||||
|
memac_mdio0_info->regs = |
||||||
|
(struct memac_mdio_controller *) |
||||||
|
CONFIG_SYS_FSL_WRIOP1_MDIO1; |
||||||
|
memac_mdio0_info->name = DEFAULT_WRIOP_MDIO1_NAME; |
||||||
|
|
||||||
|
/* Register the real MDIO1 bus */ |
||||||
|
fm_memac_mdio_init(bis, memac_mdio0_info); |
||||||
|
|
||||||
|
/* Register the muxing front-ends to the MDIO buses */ |
||||||
|
ls1088a_qds_mdio_init(DEFAULT_WRIOP_MDIO1_NAME, EMI1_RGMII1); |
||||||
|
ls1088a_qds_mdio_init(DEFAULT_WRIOP_MDIO1_NAME, EMI1_RGMII2); |
||||||
|
ls1088a_qds_mdio_init(DEFAULT_WRIOP_MDIO1_NAME, EMI1_SLOT1); |
||||||
|
|
||||||
|
for (i = WRIOP1_DPMAC1; i < NUM_WRIOP_PORTS; i++) { |
||||||
|
switch (wriop_get_enet_if(i)) { |
||||||
|
case PHY_INTERFACE_MODE_QSGMII: |
||||||
|
ls1088a_handle_phy_interface_qsgmii(i); |
||||||
|
break; |
||||||
|
case PHY_INTERFACE_MODE_SGMII: |
||||||
|
ls1088a_handle_phy_interface_sgmii(i); |
||||||
|
break; |
||||||
|
case PHY_INTERFACE_MODE_XGMII: |
||||||
|
ls1088a_handle_phy_interface_xsgmii(i); |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
|
||||||
|
if (i == 16) |
||||||
|
i = NUM_WRIOP_PORTS; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
mc_boot_env_var = env_get(MC_BOOT_ENV_VAR); |
||||||
|
if (mc_boot_env_var) |
||||||
|
run_command_list(mc_boot_env_var, -1, 0); |
||||||
|
error = cpu_eth_init(bis); |
||||||
|
|
||||||
|
if (hwconfig_f("xqsgmii", env_hwconfig)) { |
||||||
|
for (i = WRIOP1_DPMAC1; i < NUM_WRIOP_PORTS; i++) { |
||||||
|
switch (wriop_get_enet_if(i)) { |
||||||
|
case PHY_INTERFACE_MODE_QSGMII: |
||||||
|
qsgmii_configure_repeater(i); |
||||||
|
break; |
||||||
|
case PHY_INTERFACE_MODE_SGMII: |
||||||
|
sgmii_configure_repeater(i); |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
if (i == 16) |
||||||
|
i = NUM_WRIOP_PORTS; |
||||||
|
} |
||||||
|
} |
||||||
|
#endif |
||||||
|
error = pci_eth_init(bis); |
||||||
|
return error; |
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
CONFIG_ARM=y |
||||||
|
CONFIG_TARGET_LS1088AQDS=y |
||||||
|
# CONFIG_SYS_MALLOC_F is not set |
||||||
|
CONFIG_DM_SPI=y |
||||||
|
CONFIG_DM_SPI_FLASH=y |
||||||
|
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1088a-qds" |
||||||
|
CONFIG_FIT=y |
||||||
|
CONFIG_FIT_VERBOSE=y |
||||||
|
CONFIG_OF_BOARD_SETUP=y |
||||||
|
CONFIG_OF_STDOUT_VIA_ALIAS=y |
||||||
|
CONFIG_SYS_EXTRA_OPTIONS="SYS_FSL_DDR4, QSPI_BOOT" |
||||||
|
CONFIG_HUSH_PARSER=y |
||||||
|
CONFIG_CMD_MMC=y |
||||||
|
CONFIG_CMD_SF=y |
||||||
|
CONFIG_CMD_I2C=y |
||||||
|
# CONFIG_CMD_SETEXPR is not set |
||||||
|
CONFIG_CMD_DHCP=y |
||||||
|
CONFIG_CMD_PING=y |
||||||
|
CONFIG_OF_CONTROL=y |
||||||
|
CONFIG_NET_RANDOM_ETHADDR=y |
||||||
|
CONFIG_DM=y |
||||||
|
CONFIG_SPI_FLASH=y |
||||||
|
CONFIG_NETDEVICES=y |
||||||
|
CONFIG_E1000=y |
||||||
|
CONFIG_SYS_NS16550=y |
||||||
|
CONFIG_FSL_DSPI=y |
||||||
|
CONFIG_EFI_LOADER_BOUNCE_BUFFER=y |
||||||
|
# CONFIG_DISPLAY_BOARDINFO is not set |
||||||
|
CONFIG_FSL_LS_PPA=y |
@ -0,0 +1,414 @@ |
|||||||
|
/*
|
||||||
|
* Copyright 2017 NXP |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-2.0+ |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef __LS1088A_QDS_H |
||||||
|
#define __LS1088A_QDS_H |
||||||
|
|
||||||
|
#include "ls1088a_common.h" |
||||||
|
|
||||||
|
|
||||||
|
#define CONFIG_DISPLAY_BOARDINFO_LATE |
||||||
|
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLY__ |
||||||
|
unsigned long get_board_sys_clk(void); |
||||||
|
unsigned long get_board_ddr_clk(void); |
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
#if defined(CONFIG_QSPI_BOOT) |
||||||
|
#define CONFIG_ENV_IS_IN_SPI_FLASH |
||||||
|
#define CONFIG_ENV_SIZE 0x2000 /* 8KB */ |
||||||
|
#define CONFIG_ENV_OFFSET 0x300000 /* 3MB */ |
||||||
|
#define CONFIG_ENV_SECT_SIZE 0x40000 |
||||||
|
#else |
||||||
|
#define CONFIG_ENV_IS_IN_FLASH |
||||||
|
#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x300000) |
||||||
|
#define CONFIG_ENV_SECT_SIZE 0x20000 |
||||||
|
#define CONFIG_ENV_SIZE 0x20000 |
||||||
|
#endif |
||||||
|
|
||||||
|
#if defined(CONFIG_QSPI_BOOT) |
||||||
|
#define CONFIG_QIXIS_I2C_ACCESS |
||||||
|
#define SYS_NO_FLASH |
||||||
|
|
||||||
|
#undef CONFIG_CMD_IMLS |
||||||
|
#define CONFIG_SYS_CLK_FREQ 100000000 |
||||||
|
#define CONFIG_DDR_CLK_FREQ 100000000 |
||||||
|
#else |
||||||
|
#define CONFIG_SYS_CLK_FREQ get_board_sys_clk() |
||||||
|
#define CONFIG_DDR_CLK_FREQ get_board_ddr_clk() |
||||||
|
#endif |
||||||
|
|
||||||
|
#define COUNTER_FREQUENCY_REAL (CONFIG_SYS_CLK_FREQ/4) |
||||||
|
#define COUNTER_FREQUENCY 25000000 /* 25MHz */ |
||||||
|
|
||||||
|
#define CONFIG_DIMM_SLOTS_PER_CTLR 1 |
||||||
|
|
||||||
|
#define CONFIG_DDR_SPD |
||||||
|
#define CONFIG_DDR_ECC |
||||||
|
#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER |
||||||
|
#define CONFIG_MEM_INIT_VALUE 0xdeadbeef |
||||||
|
#define SPD_EEPROM_ADDRESS 0x51 |
||||||
|
#define CONFIG_SYS_SPD_BUS_NUM 0 |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IFC Definitions |
||||||
|
*/ |
||||||
|
#if !defined(CONFIG_QSPI_BOOT) && !defined(CONFIG_SD_BOOT_QSPI) |
||||||
|
#define CONFIG_SYS_NOR0_CSPR_EXT (0x0) |
||||||
|
#define CONFIG_SYS_NOR_AMASK IFC_AMASK(128*1024*1024) |
||||||
|
#define CONFIG_SYS_NOR_AMASK_EARLY IFC_AMASK(64*1024*1024) |
||||||
|
|
||||||
|
#define CONFIG_SYS_NOR0_CSPR \ |
||||||
|
(CSPR_PHYS_ADDR(CONFIG_SYS_FLASH_BASE_PHYS) | \
|
||||||
|
CSPR_PORT_SIZE_16 | \
|
||||||
|
CSPR_MSEL_NOR | \
|
||||||
|
CSPR_V) |
||||||
|
#define CONFIG_SYS_NOR0_CSPR_EARLY \ |
||||||
|
(CSPR_PHYS_ADDR(CONFIG_SYS_FLASH_BASE_PHYS_EARLY) | \
|
||||||
|
CSPR_PORT_SIZE_16 | \
|
||||||
|
CSPR_MSEL_NOR | \
|
||||||
|
CSPR_V) |
||||||
|
#define CONFIG_SYS_NOR1_CSPR \ |
||||||
|
(CSPR_PHYS_ADDR(CONFIG_SYS_FLASH1_BASE_PHYS) | \
|
||||||
|
CSPR_PORT_SIZE_16 | \
|
||||||
|
CSPR_MSEL_NOR | \
|
||||||
|
CSPR_V) |
||||||
|
#define CONFIG_SYS_NOR1_CSPR_EARLY \ |
||||||
|
(CSPR_PHYS_ADDR(CONFIG_SYS_FLASH1_BASE_PHYS_EARLY) | \
|
||||||
|
CSPR_PORT_SIZE_16 | \
|
||||||
|
CSPR_MSEL_NOR | \
|
||||||
|
CSPR_V) |
||||||
|
#define CONFIG_SYS_NOR_CSOR CSOR_NOR_ADM_SHIFT(12) |
||||||
|
#define CONFIG_SYS_NOR_FTIM0 (FTIM0_NOR_TACSE(0x4) | \ |
||||||
|
FTIM0_NOR_TEADC(0x5) | \
|
||||||
|
FTIM0_NOR_TEAHC(0x5)) |
||||||
|
#define CONFIG_SYS_NOR_FTIM1 (FTIM1_NOR_TACO(0x35) | \ |
||||||
|
FTIM1_NOR_TRAD_NOR(0x1a) |\
|
||||||
|
FTIM1_NOR_TSEQRAD_NOR(0x13)) |
||||||
|
#define CONFIG_SYS_NOR_FTIM2 (FTIM2_NOR_TCS(0x4) | \ |
||||||
|
FTIM2_NOR_TCH(0x4) | \
|
||||||
|
FTIM2_NOR_TWPH(0x0E) | \
|
||||||
|
FTIM2_NOR_TWP(0x1c)) |
||||||
|
#define CONFIG_SYS_NOR_FTIM3 0x04000000 |
||||||
|
#define CONFIG_SYS_IFC_CCR 0x01000000 |
||||||
|
|
||||||
|
#ifndef SYS_NO_FLASH |
||||||
|
#define CONFIG_FLASH_CFI_DRIVER |
||||||
|
#define CONFIG_SYS_FLASH_CFI |
||||||
|
#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE |
||||||
|
#define CONFIG_SYS_FLASH_QUIET_TEST |
||||||
|
#define CONFIG_FLASH_SHOW_PROGRESS 45 /* count down from 45/5: 9..1 */ |
||||||
|
|
||||||
|
#define CONFIG_SYS_MAX_FLASH_BANKS 2 /* number of banks */ |
||||||
|
#define CONFIG_SYS_MAX_FLASH_SECT 1024 /* sectors per device */ |
||||||
|
#define CONFIG_SYS_FLASH_ERASE_TOUT 60000 /* Flash Erase Timeout (ms) */ |
||||||
|
#define CONFIG_SYS_FLASH_WRITE_TOUT 500 /* Flash Write Timeout (ms) */ |
||||||
|
|
||||||
|
#define CONFIG_SYS_FLASH_EMPTY_INFO |
||||||
|
#define CONFIG_SYS_FLASH_BANKS_LIST { CONFIG_SYS_FLASH_BASE,\ |
||||||
|
CONFIG_SYS_FLASH_BASE + 0x40000000} |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
|
||||||
|
#define CONFIG_NAND_FSL_IFC |
||||||
|
#define CONFIG_SYS_NAND_MAX_ECCPOS 256 |
||||||
|
#define CONFIG_SYS_NAND_MAX_OOBFREE 2 |
||||||
|
|
||||||
|
#define CONFIG_SYS_NAND_CSPR_EXT (0x0) |
||||||
|
#define CONFIG_SYS_NAND_CSPR (CSPR_PHYS_ADDR(CONFIG_SYS_NAND_BASE_PHYS) \ |
||||||
|
| CSPR_PORT_SIZE_8 /* Port Size = 8 bit */ \
|
||||||
|
| CSPR_MSEL_NAND /* MSEL = NAND */ \
|
||||||
|
| CSPR_V) |
||||||
|
#define CONFIG_SYS_NAND_AMASK IFC_AMASK(64 * 1024) |
||||||
|
|
||||||
|
#define CONFIG_SYS_NAND_CSOR (CSOR_NAND_ECC_ENC_EN /* ECC on encode */ \ |
||||||
|
| CSOR_NAND_ECC_DEC_EN /* ECC on decode */ \
|
||||||
|
| CSOR_NAND_ECC_MODE_4 /* 4-bit ECC */ \
|
||||||
|
| CSOR_NAND_RAL_3 /* RAL = 3Byes */ \
|
||||||
|
| CSOR_NAND_PGS_2K /* Page Size = 2K */ \
|
||||||
|
| CSOR_NAND_SPRZ_64/* Spare size = 64 */ \
|
||||||
|
| CSOR_NAND_PB(64)) /*Pages Per Block = 64*/ |
||||||
|
|
||||||
|
#define CONFIG_SYS_NAND_ONFI_DETECTION |
||||||
|
|
||||||
|
/* ONFI NAND Flash mode0 Timing Params */ |
||||||
|
#define CONFIG_SYS_NAND_FTIM0 (FTIM0_NAND_TCCST(0x07) | \ |
||||||
|
FTIM0_NAND_TWP(0x18) | \
|
||||||
|
FTIM0_NAND_TWCHT(0x07) | \
|
||||||
|
FTIM0_NAND_TWH(0x0a)) |
||||||
|
#define CONFIG_SYS_NAND_FTIM1 (FTIM1_NAND_TADLE(0x32) | \ |
||||||
|
FTIM1_NAND_TWBE(0x39) | \
|
||||||
|
FTIM1_NAND_TRR(0x0e) | \
|
||||||
|
FTIM1_NAND_TRP(0x18)) |
||||||
|
#define CONFIG_SYS_NAND_FTIM2 (FTIM2_NAND_TRAD(0x0f) | \ |
||||||
|
FTIM2_NAND_TREH(0x0a) | \
|
||||||
|
FTIM2_NAND_TWHRE(0x1e)) |
||||||
|
#define CONFIG_SYS_NAND_FTIM3 0x0 |
||||||
|
|
||||||
|
#define CONFIG_SYS_NAND_BASE_LIST { CONFIG_SYS_NAND_BASE } |
||||||
|
#define CONFIG_SYS_MAX_NAND_DEVICE 1 |
||||||
|
#define CONFIG_MTD_NAND_VERIFY_WRITE |
||||||
|
#define CONFIG_CMD_NAND |
||||||
|
|
||||||
|
#define CONFIG_SYS_NAND_BLOCK_SIZE (128 * 1024) |
||||||
|
|
||||||
|
#define CONFIG_FSL_QIXIS |
||||||
|
#define CONFIG_SYS_I2C_FPGA_ADDR 0x66 |
||||||
|
#define QIXIS_LBMAP_SWITCH 6 |
||||||
|
#define QIXIS_QMAP_MASK 0xe0 |
||||||
|
#define QIXIS_QMAP_SHIFT 5 |
||||||
|
#define QIXIS_LBMAP_MASK 0x0f |
||||||
|
#define QIXIS_LBMAP_SHIFT 0 |
||||||
|
#define QIXIS_LBMAP_DFLTBANK 0x0e |
||||||
|
#define QIXIS_LBMAP_ALTBANK 0x2e |
||||||
|
#define QIXIS_LBMAP_SD 0x00 |
||||||
|
#define QIXIS_LBMAP_SD_QSPI 0x0e |
||||||
|
#define QIXIS_LBMAP_QSPI 0x0e |
||||||
|
#define QIXIS_RCW_SRC_SD 0x40 |
||||||
|
#define QIXIS_RCW_SRC_QSPI 0x62 |
||||||
|
#define QIXIS_RST_CTL_RESET 0x41 |
||||||
|
#define QIXIS_RCFG_CTL_RECONFIG_IDLE 0x20 |
||||||
|
#define QIXIS_RCFG_CTL_RECONFIG_START 0x21 |
||||||
|
#define QIXIS_RCFG_CTL_WATCHDOG_ENBLE 0x08 |
||||||
|
#define QIXIS_RST_FORCE_MEM 0x01 |
||||||
|
#define QIXIS_STAT_PRES1 0xb |
||||||
|
#define QIXIS_SDID_MASK 0x07 |
||||||
|
#define QIXIS_ESDHC_NO_ADAPTER 0x7 |
||||||
|
|
||||||
|
#define CONFIG_SYS_FPGA_CSPR_EXT (0x0) |
||||||
|
#define CONFIG_SYS_FPGA_CSPR (CSPR_PHYS_ADDR(QIXIS_BASE_PHYS_EARLY) \ |
||||||
|
| CSPR_PORT_SIZE_8 \
|
||||||
|
| CSPR_MSEL_GPCM \
|
||||||
|
| CSPR_V) |
||||||
|
#define SYS_FPGA_CSPR_FINAL (CSPR_PHYS_ADDR(QIXIS_BASE_PHYS) \ |
||||||
|
| CSPR_PORT_SIZE_8 \
|
||||||
|
| CSPR_MSEL_GPCM \
|
||||||
|
| CSPR_V) |
||||||
|
|
||||||
|
#define CONFIG_SYS_FPGA_AMASK IFC_AMASK(64*1024) |
||||||
|
#if defined(CONFIG_QSPI_BOOT) |
||||||
|
#define CONFIG_SYS_FPGA_CSOR CSOR_GPCM_ADM_SHIFT(0) |
||||||
|
#else |
||||||
|
#define CONFIG_SYS_FPGA_CSOR CSOR_GPCM_ADM_SHIFT(12) |
||||||
|
#endif |
||||||
|
/* QIXIS Timing parameters*/ |
||||||
|
#define SYS_FPGA_CS_FTIM0 (FTIM0_GPCM_TACSE(0x0e) | \ |
||||||
|
FTIM0_GPCM_TEADC(0x0e) | \
|
||||||
|
FTIM0_GPCM_TEAHC(0x0e)) |
||||||
|
#define SYS_FPGA_CS_FTIM1 (FTIM1_GPCM_TACO(0xff) | \ |
||||||
|
FTIM1_GPCM_TRAD(0x3f)) |
||||||
|
#define SYS_FPGA_CS_FTIM2 (FTIM2_GPCM_TCS(0xf) | \ |
||||||
|
FTIM2_GPCM_TCH(0xf) | \
|
||||||
|
FTIM2_GPCM_TWP(0x3E)) |
||||||
|
#define SYS_FPGA_CS_FTIM3 0x0 |
||||||
|
|
||||||
|
#if defined(CONFIG_QSPI_BOOT) || defined(CONFIG_SD_BOOT_QSPI) |
||||||
|
#define CONFIG_SYS_CSPR0_EXT CONFIG_SYS_NAND_CSPR_EXT |
||||||
|
#define CONFIG_SYS_CSPR0 CONFIG_SYS_NAND_CSPR |
||||||
|
#define CONFIG_SYS_AMASK0 CONFIG_SYS_NAND_AMASK |
||||||
|
#define CONFIG_SYS_CSOR0 CONFIG_SYS_NAND_CSOR |
||||||
|
#define CONFIG_SYS_CS0_FTIM0 CONFIG_SYS_NAND_FTIM0 |
||||||
|
#define CONFIG_SYS_CS0_FTIM1 CONFIG_SYS_NAND_FTIM1 |
||||||
|
#define CONFIG_SYS_CS0_FTIM2 CONFIG_SYS_NAND_FTIM2 |
||||||
|
#define CONFIG_SYS_CS0_FTIM3 CONFIG_SYS_NAND_FTIM3 |
||||||
|
#define CONFIG_SYS_CSPR2_EXT CONFIG_SYS_FPGA_CSPR_EXT |
||||||
|
#define CONFIG_SYS_CSPR2 CONFIG_SYS_FPGA_CSPR |
||||||
|
#define CONFIG_SYS_CSPR2_FINAL SYS_FPGA_CSPR_FINAL |
||||||
|
#define CONFIG_SYS_AMASK2 CONFIG_SYS_FPGA_AMASK |
||||||
|
#define CONFIG_SYS_CSOR2 CONFIG_SYS_FPGA_CSOR |
||||||
|
#define CONFIG_SYS_CS2_FTIM0 SYS_FPGA_CS_FTIM0 |
||||||
|
#define CONFIG_SYS_CS2_FTIM1 SYS_FPGA_CS_FTIM1 |
||||||
|
#define CONFIG_SYS_CS2_FTIM2 SYS_FPGA_CS_FTIM2 |
||||||
|
#define CONFIG_SYS_CS2_FTIM3 SYS_FPGA_CS_FTIM3 |
||||||
|
#else |
||||||
|
#define CONFIG_SYS_CSPR0_EXT CONFIG_SYS_NOR0_CSPR_EXT |
||||||
|
#define CONFIG_SYS_CSPR0 CONFIG_SYS_NOR0_CSPR_EARLY |
||||||
|
#define CONFIG_SYS_CSPR0_FINAL CONFIG_SYS_NOR0_CSPR |
||||||
|
#define CONFIG_SYS_AMASK0 CONFIG_SYS_NOR_AMASK |
||||||
|
#define CONFIG_SYS_CSOR0 CONFIG_SYS_NOR_CSOR |
||||||
|
#define CONFIG_SYS_CS0_FTIM0 CONFIG_SYS_NOR_FTIM0 |
||||||
|
#define CONFIG_SYS_CS0_FTIM1 CONFIG_SYS_NOR_FTIM1 |
||||||
|
#define CONFIG_SYS_CS0_FTIM2 CONFIG_SYS_NOR_FTIM2 |
||||||
|
#define CONFIG_SYS_CS0_FTIM3 CONFIG_SYS_NOR_FTIM3 |
||||||
|
#define CONFIG_SYS_CSPR1_EXT CONFIG_SYS_NOR0_CSPR_EXT |
||||||
|
#define CONFIG_SYS_CSPR1 CONFIG_SYS_NOR1_CSPR_EARLY |
||||||
|
#define CONFIG_SYS_CSPR1_FINAL CONFIG_SYS_NOR1_CSPR |
||||||
|
#define CONFIG_SYS_AMASK1 CONFIG_SYS_NOR_AMASK_EARLY |
||||||
|
#define CONFIG_SYS_AMASK1_FINAL CONFIG_SYS_NOR_AMASK |
||||||
|
#define CONFIG_SYS_CSOR1 CONFIG_SYS_NOR_CSOR |
||||||
|
#define CONFIG_SYS_CS1_FTIM0 CONFIG_SYS_NOR_FTIM0 |
||||||
|
#define CONFIG_SYS_CS1_FTIM1 CONFIG_SYS_NOR_FTIM1 |
||||||
|
#define CONFIG_SYS_CS1_FTIM2 CONFIG_SYS_NOR_FTIM2 |
||||||
|
#define CONFIG_SYS_CS1_FTIM3 CONFIG_SYS_NOR_FTIM3 |
||||||
|
#define CONFIG_SYS_CSPR2_EXT CONFIG_SYS_NAND_CSPR_EXT |
||||||
|
#define CONFIG_SYS_CSPR2 CONFIG_SYS_NAND_CSPR |
||||||
|
#define CONFIG_SYS_AMASK2 CONFIG_SYS_NAND_AMASK |
||||||
|
#define CONFIG_SYS_CSOR2 CONFIG_SYS_NAND_CSOR |
||||||
|
#define CONFIG_SYS_CS2_FTIM0 CONFIG_SYS_NAND_FTIM0 |
||||||
|
#define CONFIG_SYS_CS2_FTIM1 CONFIG_SYS_NAND_FTIM1 |
||||||
|
#define CONFIG_SYS_CS2_FTIM2 CONFIG_SYS_NAND_FTIM2 |
||||||
|
#define CONFIG_SYS_CS2_FTIM3 CONFIG_SYS_NAND_FTIM3 |
||||||
|
#define CONFIG_SYS_CSPR3_EXT CONFIG_SYS_FPGA_CSPR_EXT |
||||||
|
#define CONFIG_SYS_CSPR3 CONFIG_SYS_FPGA_CSPR |
||||||
|
#define CONFIG_SYS_CSPR3_FINAL CONFIG_SYS_FPGA_CSPR_FINAL |
||||||
|
#define CONFIG_SYS_AMASK3 CONFIG_SYS_FPGA_AMASK |
||||||
|
#define CONFIG_SYS_CSOR3 CONFIG_SYS_FPGA_CSOR |
||||||
|
#define CONFIG_SYS_CS3_FTIM0 CONFIG_SYS_FPGA_CS_FTIM0 |
||||||
|
#define CONFIG_SYS_CS3_FTIM1 CONFIG_SYS_FPGA_CS_FTIM1 |
||||||
|
#define CONFIG_SYS_CS3_FTIM2 CONFIG_SYS_FPGA_CS_FTIM2 |
||||||
|
#define CONFIG_SYS_CS3_FTIM3 CONFIG_SYS_FPGA_CS_FTIM3 |
||||||
|
#endif |
||||||
|
|
||||||
|
#define CONFIG_SYS_LS_MC_BOOT_TIMEOUT_MS 5000 |
||||||
|
|
||||||
|
/*
|
||||||
|
* I2C bus multiplexer |
||||||
|
*/ |
||||||
|
#define I2C_MUX_PCA_ADDR_PRI 0x77 |
||||||
|
#define I2C_MUX_PCA_ADDR_SEC 0x76 /* Secondary multiplexer */ |
||||||
|
#define I2C_RETIMER_ADDR 0x18 |
||||||
|
#define I2C_RETIMER_ADDR2 0x19 |
||||||
|
#define I2C_MUX_CH_DEFAULT 0x8 |
||||||
|
#define I2C_MUX_CH5 0xD |
||||||
|
|
||||||
|
/*
|
||||||
|
* RTC configuration |
||||||
|
*/ |
||||||
|
#define RTC |
||||||
|
#define CONFIG_RTC_PCF8563 1 |
||||||
|
#define CONFIG_SYS_I2C_RTC_ADDR 0x51 /* Channel 3*/ |
||||||
|
#define CONFIG_CMD_DATE |
||||||
|
|
||||||
|
/* EEPROM */ |
||||||
|
#define CONFIG_ID_EEPROM |
||||||
|
#define CONFIG_SYS_I2C_EEPROM_NXID |
||||||
|
#define CONFIG_SYS_EEPROM_BUS_NUM 0 |
||||||
|
#define CONFIG_SYS_I2C_EEPROM_ADDR 0x57 |
||||||
|
#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1 |
||||||
|
#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 3 |
||||||
|
#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 5 |
||||||
|
|
||||||
|
/* QSPI device */ |
||||||
|
#if defined(CONFIG_QSPI_BOOT) |
||||||
|
#define CONFIG_FSL_QSPI |
||||||
|
#define CONFIG_SPI_FLASH_SPANSION |
||||||
|
#define FSL_QSPI_FLASH_SIZE (1 << 26) |
||||||
|
#define FSL_QSPI_FLASH_NUM 2 |
||||||
|
|
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef CONFIG_FSL_DSPI |
||||||
|
#define CONFIG_SPI_FLASH_STMICRO |
||||||
|
#define CONFIG_SPI_FLASH_SST |
||||||
|
#define CONFIG_SPI_FLASH_EON |
||||||
|
#if !defined(CONFIG_QSPI_BOOT) && !defined(CONFIG_SD_BOOT_QSPI) |
||||||
|
#define CONFIG_SF_DEFAULT_BUS 1 |
||||||
|
#define CONFIG_SF_DEFAULT_CS 0 |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
|
||||||
|
#define CONFIG_CMD_MEMINFO |
||||||
|
#define CONFIG_CMD_MEMTEST |
||||||
|
#define CONFIG_SYS_MEMTEST_START 0x80000000 |
||||||
|
#define CONFIG_SYS_MEMTEST_END 0x9fffffff |
||||||
|
|
||||||
|
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE |
||||||
|
|
||||||
|
#define CONFIG_FSL_MEMAC |
||||||
|
|
||||||
|
/* MMC */ |
||||||
|
#define CONFIG_FSL_ESDHC |
||||||
|
#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 |
||||||
|
#define CONFIG_ESDHC_DETECT_QUIRK ((readb(QIXIS_BASE + QIXIS_STAT_PRES1) & \ |
||||||
|
QIXIS_SDID_MASK) != QIXIS_ESDHC_NO_ADAPTER) |
||||||
|
|
||||||
|
/* Initial environment variables */ |
||||||
|
#if defined(CONFIG_QSPI_BOOT) |
||||||
|
#undef CONFIG_EXTRA_ENV_SETTINGS |
||||||
|
#define CONFIG_EXTRA_ENV_SETTINGS \ |
||||||
|
"hwconfig=fsl_ddr:bank_intlv=auto\0" \
|
||||||
|
"loadaddr=0x90100000\0" \
|
||||||
|
"kernel_addr=0x100000\0" \
|
||||||
|
"ramdisk_addr=0x800000\0" \
|
||||||
|
"ramdisk_size=0x2000000\0" \
|
||||||
|
"fdt_high=0xa0000000\0" \
|
||||||
|
"initrd_high=0xffffffffffffffff\0" \
|
||||||
|
"kernel_start=0x1000000\0" \
|
||||||
|
"kernel_load=0xa0000000\0" \
|
||||||
|
"kernel_size=0x2800000\0" \
|
||||||
|
"mcinitcmd=sf probe 0:0;sf read 0x80000000 0xA00000 0x100000;" \
|
||||||
|
"sf read 0x80100000 0xE00000 0x100000;" \
|
||||||
|
"fsl_mc start mc 0x80000000 0x80100000\0" \
|
||||||
|
"mcmemsize=0x70000000 \0" |
||||||
|
#else /* NOR BOOT */ |
||||||
|
#undef CONFIG_EXTRA_ENV_SETTINGS |
||||||
|
#define CONFIG_EXTRA_ENV_SETTINGS \ |
||||||
|
"hwconfig=fsl_ddr:bank_intlv=auto\0" \
|
||||||
|
"loadaddr=0x90100000\0" \
|
||||||
|
"kernel_addr=0x100000\0" \
|
||||||
|
"ramdisk_addr=0x800000\0" \
|
||||||
|
"ramdisk_size=0x2000000\0" \
|
||||||
|
"fdt_high=0xa0000000\0" \
|
||||||
|
"initrd_high=0xffffffffffffffff\0" \
|
||||||
|
"kernel_start=0x1000000\0" \
|
||||||
|
"kernel_load=0xa0000000\0" \
|
||||||
|
"kernel_size=0x2800000\0" \
|
||||||
|
"mcinitcmd=fsl_mc start mc 0x580A00000 0x580E00000\0" \
|
||||||
|
"mcmemsize=0x70000000 \0" |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef CONFIG_FSL_MC_ENET |
||||||
|
#define CONFIG_FSL_MEMAC |
||||||
|
#define CONFIG_PHYLIB |
||||||
|
#define CONFIG_PHYLIB_10G |
||||||
|
#define CONFIG_PHY_VITESSE |
||||||
|
#define CONFIG_PHY_REALTEK |
||||||
|
#define CONFIG_PHY_TERANETICS |
||||||
|
#define RGMII_PHY1_ADDR 0x1 |
||||||
|
#define RGMII_PHY2_ADDR 0x2 |
||||||
|
#define SGMII_CARD_PORT1_PHY_ADDR 0x1C |
||||||
|
#define SGMII_CARD_PORT2_PHY_ADDR 0x1d |
||||||
|
#define SGMII_CARD_PORT3_PHY_ADDR 0x1E |
||||||
|
#define SGMII_CARD_PORT4_PHY_ADDR 0x1F |
||||||
|
|
||||||
|
#define XQSGMII_CARD_PHY1_PORT0_ADDR 0x0 |
||||||
|
#define XQSGMII_CARD_PHY1_PORT1_ADDR 0x1 |
||||||
|
#define XQSGMII_CARD_PHY1_PORT2_ADDR 0x2 |
||||||
|
#define XQSGMII_CARD_PHY1_PORT3_ADDR 0x3 |
||||||
|
#define XQSGMII_CARD_PHY2_PORT0_ADDR 0x4 |
||||||
|
#define XQSGMII_CARD_PHY2_PORT1_ADDR 0x5 |
||||||
|
#define XQSGMII_CARD_PHY2_PORT2_ADDR 0x6 |
||||||
|
#define XQSGMII_CARD_PHY2_PORT3_ADDR 0x7 |
||||||
|
#define XQSGMII_CARD_PHY3_PORT0_ADDR 0x8 |
||||||
|
#define XQSGMII_CARD_PHY3_PORT1_ADDR 0x9 |
||||||
|
#define XQSGMII_CARD_PHY3_PORT2_ADDR 0xa |
||||||
|
#define XQSGMII_CARD_PHY3_PORT3_ADDR 0xb |
||||||
|
#define XQSGMII_CARD_PHY4_PORT0_ADDR 0xc |
||||||
|
#define XQSGMII_CARD_PHY4_PORT1_ADDR 0xd |
||||||
|
#define XQSGMII_CARD_PHY4_PORT2_ADDR 0xe |
||||||
|
#define XQSGMII_CARD_PHY4_PORT3_ADDR 0xf |
||||||
|
|
||||||
|
#define CONFIG_MII /* MII PHY management */ |
||||||
|
#define CONFIG_ETHPRIME "DPMAC1@xgmii" |
||||||
|
#define CONFIG_PHY_GIGE /* Include GbE speed/duplex detection */ |
||||||
|
|
||||||
|
#endif |
||||||
|
|
||||||
|
#undef CONFIG_CMDLINE_EDITING |
||||||
|
#include <config_distro_defaults.h> |
||||||
|
#define BOOT_TARGET_DEVICES(func) \ |
||||||
|
func(USB, usb, 0) \
|
||||||
|
func(MMC, mmc, 0) \
|
||||||
|
func(SCSI, scsi, 0) \
|
||||||
|
func(DHCP, dhcp, na) |
||||||
|
#include <config_distro_bootcmd.h> |
||||||
|
|
||||||
|
#include <asm/fsl_secure_boot.h> |
||||||
|
|
||||||
|
#endif /* __LS1088A_QDS_H */ |
Loading…
Reference in new issue