diff options
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/Makefile | 4 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/speed.c | 2 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/t2080_ids.c | 142 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/t2080_serdes.c | 208 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc8xxx/cpu.c | 2 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/config_mpc85xx.h | 44 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/immap_85xx.h | 16 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/processor.h | 2 | ||||
| -rw-r--r-- | drivers/net/fm/Makefile | 2 | ||||
| -rw-r--r-- | drivers/net/fm/t2080.c | 91 | 
10 files changed, 512 insertions, 1 deletions
| diff --git a/arch/powerpc/cpu/mpc85xx/Makefile b/arch/powerpc/cpu/mpc85xx/Makefile index 91c840204..ef7637a49 100644 --- a/arch/powerpc/cpu/mpc85xx/Makefile +++ b/arch/powerpc/cpu/mpc85xx/Makefile @@ -50,6 +50,8 @@ obj-$(CONFIG_PPC_T1040) += t1040_ids.o  obj-$(CONFIG_PPC_T1042)	+= t1040_ids.o  obj-$(CONFIG_PPC_T1020)	+= t1040_ids.o  obj-$(CONFIG_PPC_T1022)	+= t1040_ids.o +obj-$(CONFIG_PPC_T2080) += t2080_ids.o +obj-$(CONFIG_PPC_T2081) += t2080_ids.o  obj-$(CONFIG_QE)	+= qe_io.o @@ -93,6 +95,8 @@ obj-$(CONFIG_PPC_T1040) += t1040_serdes.o  obj-$(CONFIG_PPC_T1042)	+= t1040_serdes.o  obj-$(CONFIG_PPC_T1020)	+= t1040_serdes.o  obj-$(CONFIG_PPC_T1022)	+= t1040_serdes.o +obj-$(CONFIG_PPC_T2080) += t2080_serdes.o +obj-$(CONFIG_PPC_T2081) += t2080_serdes.o  obj-y	+= cpu.o  obj-y	+= cpu_init.o diff --git a/arch/powerpc/cpu/mpc85xx/speed.c b/arch/powerpc/cpu/mpc85xx/speed.c index d08a8d212..1a58a194f 100644 --- a/arch/powerpc/cpu/mpc85xx/speed.c +++ b/arch/powerpc/cpu/mpc85xx/speed.c @@ -122,7 +122,7 @@ void get_sys_info(sys_info_t *sys_info)  		sys_info->freq_processor[cpu] =  			 freq_c_pll[cplx_pll] / core_cplx_pll_div[c_pll_sel];  	} -#ifdef CONFIG_PPC_B4860 +#if defined(CONFIG_PPC_B4860) || defined(CONFIG_PPC_T2080)  #define FM1_CLK_SEL	0xe0000000  #define FM1_CLK_SHIFT	29  #else diff --git a/arch/powerpc/cpu/mpc85xx/t2080_ids.c b/arch/powerpc/cpu/mpc85xx/t2080_ids.c new file mode 100644 index 000000000..068e1f26b --- /dev/null +++ b/arch/powerpc/cpu/mpc85xx/t2080_ids.c @@ -0,0 +1,142 @@ +/* + * Copyright 2013 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), +	SET_QP_INFO(11, 37, 1, 1), +	SET_QP_INFO(12, 38, 1, 1), +	SET_QP_INFO(13, 39, 1, 2), +	SET_QP_INFO(14, 40, 1, 2), +	SET_QP_INFO(15, 41, 1, 3), +	SET_QP_INFO(16, 42, 1, 3), +	SET_QP_INFO(17, 43, 1, 0), +	SET_QP_INFO(18, 44, 1, 0), +}; +#endif + +#ifdef CONFIG_SYS_SRIO +struct srio_liodn_id_table srio_liodn_tbl[] = { +	SET_SRIO_LIODN_BASE(1, 307), +	SET_SRIO_LIODN_BASE(2, 387), +}; +int srio_liodn_tbl_sz = ARRAY_SIZE(srio_liodn_tbl); +#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_PME_LIODN(117), + +	SET_USB_LIODN(1, "fsl-usb2-mph", 553), +	SET_USB_LIODN(2, "fsl-usb2-dr", 554), + +	SET_SATA_LIODN(1, 555), +	SET_SATA_LIODN(2, 556), + +	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_PCI_LIODN_BASE(CONFIG_SYS_FSL_PCIE_COMPAT, 4, 388), + +	SET_DMA_LIODN(1, 147), +	SET_DMA_LIODN(2, 227), +	SET_DMA_LIODN(3, 226), + +	SET_GUTS_LIODN("fsl,rapidio-delta", 199, rio1liodnr, 0), +	SET_GUTS_LIODN(NULL, 200, rio2liodnr, 0), +	SET_GUTS_LIODN(NULL, 201, rio1maintliodnr, 0), +	SET_GUTS_LIODN(NULL, 202, rio2maintliodnr, 0), + +#ifdef CONFIG_SYS_PMAN +	SET_PMAN_LIODN(1, 513), +	SET_PMAN_LIODN(2, 514), +	SET_PMAN_LIODN(3, 515), +#endif + +	/* SET_NEXUS_LIODN(557), -- not yet implemented */ +}; +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_1G_LIODN(1, 4, 92), +	SET_FMAN_RX_1G_LIODN(1, 5, 93), +	SET_FMAN_RX_10G_LIODN(1, 0, 94), +	SET_FMAN_RX_10G_LIODN(1, 1, 95), +}; +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), +	SET_SEC_DECO_LIODN_ENTRY(2, 543, 612), +	SET_SEC_DECO_LIODN_ENTRY(3, 544, 613), +	SET_SEC_DECO_LIODN_ENTRY(4, 545, 614), +	SET_SEC_DECO_LIODN_ENTRY(5, 546, 615), +	SET_SEC_DECO_LIODN_ENTRY(6, 547, 616), +	SET_SEC_DECO_LIODN_ENTRY(7, 548, 617), +}; +int sec_liodn_tbl_sz = ARRAY_SIZE(sec_liodn_tbl); + +#ifdef CONFIG_SYS_DPAA_RMAN +struct liodn_id_table rman_liodn_tbl[] = { +	/* Set RMan block 0-3 liodn offset */ +	SET_RMAN_LIODN(0, 6), +	SET_RMAN_LIODN(1, 7), +	SET_RMAN_LIODN(2, 8), +	SET_RMAN_LIODN(3, 9), +}; +int rman_liodn_tbl_sz = ARRAY_SIZE(rman_liodn_tbl); +#endif + +struct liodn_id_table liodn_bases[] = { +#ifdef CONFIG_SYS_DPAA_DCE +	[FSL_HW_PORTAL_DCE]  = SET_LIODN_BASE_2(618, 694), +#endif +	[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 +#ifdef CONFIG_SYS_DPAA_PME +	[FSL_HW_PORTAL_PME]   = SET_LIODN_BASE_2(770, 846), +#endif +#ifdef CONFIG_SYS_DPAA_RMAN +	[FSL_HW_PORTAL_RMAN] = SET_LIODN_BASE_1(922), +#endif +}; diff --git a/arch/powerpc/cpu/mpc85xx/t2080_serdes.c b/arch/powerpc/cpu/mpc85xx/t2080_serdes.c new file mode 100644 index 000000000..f2fbdebec --- /dev/null +++ b/arch/powerpc/cpu/mpc85xx/t2080_serdes.c @@ -0,0 +1,208 @@ +/* + * Copyright 2013 Freescale Semiconductor, Inc. + * + * Shengzhou Liu <Shengzhou.Liu@freescale.com> + * + * SPDX-License-Identifier:     GPL-2.0+ + */ + +#include <common.h> +#include <asm/fsl_serdes.h> +#include <asm/processor.h> +#include "fsl_corenet2_serdes.h" + +struct serdes_config { +	u32 protocol; +	u8 lanes[SRDS_MAX_LANES]; +}; + +static const struct serdes_config serdes1_cfg_tbl[] = { +	/* SerDes 1 */ +	{0x6E, {XFI_FM1_MAC9, XFI_FM1_MAC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, +		PCIE4, PCIE4, SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0xBC, {PCIE3, PCIE3, SGMII_FM1_DTSEC1, +		SGMII_FM1_DTSEC2, PCIE4, PCIE4, PCIE4, PCIE4} }, +	{0xC8, {PCIE3, SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC1, +		SGMII_FM1_DTSEC2, PCIE4, PCIE4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0xD6, {PCIE3, SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC1, +		SGMII_FM1_DTSEC2, PCIE4, PCIE4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0xDE, {PCIE3, PCIE3, PCIE3, PCIE3, +		PCIE4, PCIE1, PCIE2, SGMII_FM1_DTSEC6} }, +	{0xE0, {PCIE3, PCIE3, PCIE3, PCIE3, PCIE4, +		PCIE1, SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0xF2, {PCIE3, SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC1, +		SGMII_FM1_DTSEC2, PCIE4, PCIE1, PCIE2, SGMII_FM1_DTSEC6} }, +	{0xF8, {PCIE3, SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC1, +		SGMII_FM1_DTSEC2, PCIE4, PCIE1, PCIE2, SGMII_FM1_DTSEC6} }, +	{0xFA, {PCIE3, SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC1, +		SGMII_FM1_DTSEC2, PCIE4, PCIE1, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0x6C, {XFI_FM1_MAC9, XFI_FM1_MAC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, +		PCIE4, PCIE4, PCIE4, PCIE4} }, +#if defined(CONFIG_PPC_T2080) +	{0x1C, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, +		SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0x95, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, +		SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0xA2, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, +		SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0x94, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, +		SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0x51, {XAUI_FM1_MAC9, XAUI_FM1_MAC9, +		XAUI_FM1_MAC9, XAUI_FM1_MAC9, +		PCIE4, SGMII_FM1_DTSEC4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0x5F, {HIGIG_FM1_MAC9, HIGIG_FM1_MAC9, +		HIGIG_FM1_MAC9, HIGIG_FM1_MAC9, +		PCIE4, SGMII_FM1_DTSEC4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0x65, {HIGIG_FM1_MAC9, HIGIG_FM1_MAC9, +		HIGIG_FM1_MAC9, HIGIG_FM1_MAC9, +		PCIE4, SGMII_FM1_DTSEC4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0x6B, {XFI_FM1_MAC9, XFI_FM1_MAC10, +		XFI_FM1_MAC1, XFI_FM1_MAC2, +		PCIE4, SGMII_FM1_DTSEC4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0x6D, {XFI_FM1_MAC9, XFI_FM1_MAC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, +		PCIE4, PCIE4, PCIE4, PCIE4} }, +	{0x71, {XFI_FM1_MAC9, XFI_FM1_MAC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, PCIE4, +		SGMII_FM1_DTSEC4, SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0xA6, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, PCIE4, +		PCIE4, SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0x8E, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, PCIE4, +		PCIE4, SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0x8F, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, PCIE4, +		PCIE4, SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0x82, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, +		PCIE4, PCIE4, SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0x83, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, +		PCIE4, PCIE4, SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0xA4, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, +		PCIE4, PCIE4, PCIE4, PCIE4} }, +	{0x96, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, +		PCIE4, PCIE4, PCIE4, PCIE4} }, +	{0x8A, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC10, +		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, +		PCIE4, PCIE4, PCIE4, PCIE4} }, +	{0x67, {XFI_FM1_MAC9, XFI_FM1_MAC10, +		XFI_FM1_MAC1, XFI_FM1_MAC2, +		PCIE4, PCIE4, PCIE4, PCIE4} }, +	{0xAB, {PCIE3, PCIE3, PCIE3, PCIE3, +		PCIE4, PCIE4, PCIE4, PCIE4} }, +	{0xDA, {PCIE3, PCIE3, PCIE3, PCIE3, +		PCIE3, PCIE3, PCIE3, PCIE3} }, +	{0xD9, {PCIE3, SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC1, +		SGMII_FM1_DTSEC2, PCIE4, SGMII_FM1_DTSEC4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0xD3, {PCIE3, SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC1, +		SGMII_FM1_DTSEC2, PCIE4, SGMII_FM1_DTSEC4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0xCB, {PCIE3, SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC1, +		SGMII_FM1_DTSEC2, PCIE4, SGMII_FM1_DTSEC4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0xD8, {PCIE3, SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC1, +		SGMII_FM1_DTSEC2, PCIE4, SGMII_FM1_DTSEC4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0x66, {XFI_FM1_MAC9, XFI_FM1_MAC10, +		XFI_FM1_MAC1, XFI_FM1_MAC2, +		PCIE4, PCIE4, PCIE4, PCIE4} }, + +#elif defined(CONFIG_PPC_T2081) +	{0xAA, {PCIE3, PCIE3, PCIE3, PCIE3, +		PCIE4, PCIE4, PCIE4, PCIE4} }, +	{0xCA, {PCIE3, SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC1, +		SGMII_FM1_DTSEC2, PCIE4, SGMII_FM1_DTSEC4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +	{0x70, {XFI_FM1_MAC9, XFI_FM1_MAC10, SGMII_FM1_DTSEC1, +		SGMII_FM1_DTSEC2, PCIE4, SGMII_FM1_DTSEC4, +		SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6} }, +#endif +	{} +}; + +#ifndef CONFIG_PPC_T2081 +static const struct serdes_config serdes2_cfg_tbl[] = { +	/* SerDes 2 */ +	{0x1F, {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2} }, +	{0x16, {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, SATA1, SATA2} }, +	{0x01, {PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1} }, +	{0x29, {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1} }, +	{0x2D, {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1} }, +	{0x15, {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, SATA1, SATA2} }, +	{0x18, {PCIE1, PCIE1, PCIE1, PCIE1, AURORA, AURORA, SATA1, SATA2} }, +	{0x02, {PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1} }, +	{0x36, {SRIO2, SRIO2, SRIO2, SRIO2, AURORA, AURORA, SATA1, SATA2} }, +	{} +}; +#endif + +static const struct serdes_config *serdes_cfg_tbl[] = { +	serdes1_cfg_tbl, +#ifndef CONFIG_PPC_T2081 +	serdes2_cfg_tbl, +#endif +}; + +enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane) +{ +	const 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; +	const 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; +} diff --git a/arch/powerpc/cpu/mpc8xxx/cpu.c b/arch/powerpc/cpu/mpc8xxx/cpu.c index c67be4ef2..35795c4fb 100644 --- a/arch/powerpc/cpu/mpc8xxx/cpu.c +++ b/arch/powerpc/cpu/mpc8xxx/cpu.c @@ -75,6 +75,8 @@ static struct cpu_type cpu_type_list[] = {  	CPU_TYPE_ENTRY(T1020, T1020, 0),  	CPU_TYPE_ENTRY(T1021, T1021, 0),  	CPU_TYPE_ENTRY(T1022, T1022, 0), +	CPU_TYPE_ENTRY(T2080, T2080, 0), +	CPU_TYPE_ENTRY(T2081, T2081, 0),  	CPU_TYPE_ENTRY(BSC9130, 9130, 1),  	CPU_TYPE_ENTRY(BSC9131, 9131, 1),  	CPU_TYPE_ENTRY(BSC9132, 9132, 2), diff --git a/arch/powerpc/include/asm/config_mpc85xx.h b/arch/powerpc/include/asm/config_mpc85xx.h index 047fdf1d8..99e16bdf6 100644 --- a/arch/powerpc/include/asm/config_mpc85xx.h +++ b/arch/powerpc/include/asm/config_mpc85xx.h @@ -718,6 +718,50 @@ defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)  #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY  #define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000 +#elif defined(CONFIG_PPC_T2080) || defined(CONFIG_PPC_T2081) +#define CONFIG_E6500 +#define CONFIG_SYS_PPC64		/* 64-bit core */ +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */ +#define CONFIG_SYS_FSL_QORIQ_CHASSIS2	/* Freescale Chassis generation 2 */ +#define CONFIG_SYS_FSL_CORES_PER_CLUSTER 4 +#define CONFIG_SYS_FSL_NUM_CC_PLLS	2 +#define CONFIG_SYS_FSL_QMAN_V3 +#define CONFIG_MAX_CPUS			4 +#define CONFIG_SYS_FSL_NUM_LAWS		32 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_SYS_NUM_FMAN		1 +#define CONFIG_SYS_FSL_CLUSTER_CLOCKS	{ 1, 4, 4, 4 } +#define CONFIG_SYS_FSL_SRDS_1 +#define CONFIG_SYS_FSL_PCI_VER_3_X +#if defined(CONFIG_PPC_T2080) +#define CONFIG_SYS_NUM_FM1_DTSEC	8 +#define CONFIG_SYS_NUM_FM1_10GEC	4 +#define CONFIG_SYS_FSL_SRDS_2 +#define CONFIG_SYS_FSL_SRIO_LIODN +#define CONFIG_SYS_FSL_SRIO_MAX_PORTS	2 +#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM	9 +#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5 +#elif defined(CONFIG_PPC_T2081) +#define CONFIG_SYS_NUM_FM1_DTSEC	6 +#define CONFIG_SYS_NUM_FM1_10GEC	2 +#endif +#define CONFIG_SYS_FSL_NUM_USB_CTRLS	2 +#define CONFIG_NUM_DDR_CONTROLLERS	1 +#define CONFIG_PME_PLAT_CLK_DIV		1 +#define CONFIG_SYS_PME_CLK		CONFIG_PME_PLAT_CLK_DIV +#define CONFIG_SYS_FM1_CLK		0 +#define CONFIG_SYS_FSL_DDR_VER		FSL_DDR_VER_4_7 +#define CONFIG_SYS_FSL_IFC_BANK_COUNT	8 +#define CONFIG_SYS_FMAN_V3 +#define CONFIG_SYS_FM_MURAM_SIZE	0x28000 +#define CONFIG_SYS_FSL_TBCLK_DIV	16 +#define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v3.0" +#define CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE +#define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000 +#define CONFIG_SYS_FSL_SFP_VER_3_0 +#define CONFIG_SYS_FSL_ISBC_VER		2 +  #elif defined(CONFIG_PPC_C29X)  #define CONFIG_MAX_CPUS			1  #define CONFIG_FSL_SDHC_V2_3 diff --git a/arch/powerpc/include/asm/immap_85xx.h b/arch/powerpc/include/asm/immap_85xx.h index 882b0b15e..672e8c665 100644 --- a/arch/powerpc/include/asm/immap_85xx.h +++ b/arch/powerpc/include/asm/immap_85xx.h @@ -1759,6 +1759,12 @@ defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)  #define FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT	24  #define FSL_CORENET2_RCWSR4_SRDS2_PRTCL	0x00fe0000  #define FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT	17 +#elif defined(CONFIG_PPC_T2080) || defined(CONFIG_PPC_T2081) +#define FSL_CORENET2_RCWSR4_SRDS1_PRTCL		0xff000000 +#define FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT	24 +#define FSL_CORENET2_RCWSR4_SRDS2_PRTCL		0x00ff0000 +#define FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT	16 +#define FSL_CORENET_RCWSR6_BOOT_LOC		0x0f800000  #endif  #define FSL_CORENET2_RCWSR5_SRDS_PLL_PD_S1_PLL1	0x00800000  #define FSL_CORENET2_RCWSR5_SRDS_PLL_PD_S1_PLL2	0x00400000 @@ -1822,6 +1828,15 @@ defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)  #define FSL_CORENET_RCWSR13_EC2_FM1_DTSEC6_RGMII	0x08000000  #define FSL_CORENET_RCWSR13_EC2_FM1_GPIO		0x10000000  #endif +#if defined(CONFIG_PPC_T2080) || defined(CONFIG_PPC_T2081) +#define FSL_CORENET_RCWSR13_EC1			0x60000000 /* bits 417..418 */ +#define FSL_CORENET_RCWSR13_EC1_DTSEC3_RGMII	0x00000000 +#define FSL_CORENET_RCWSR13_EC1_GPIO		0x40000000 +#define FSL_CORENET_RCWSR13_EC2			0x18000000 /* bits 419..420 */ +#define FSL_CORENET_RCWSR13_EC2_DTSEC4_RGMII	0x00000000 +#define FSL_CORENET_RCWSR13_EC2_DTSEC10_RGMII	0x08000000 +#define FSL_CORENET_RCWSR13_EC2_GPIO		0x10000000 +#endif  	u8	res18[192];  	u32	scratchrw[4];	/* Scratch Read/Write */  	u8	res19[240]; @@ -2818,6 +2833,7 @@ struct ccsr_pman {  #define CONFIG_SYS_FSL_CPC_OFFSET		0x10000  #define CONFIG_SYS_MPC85xx_DMA1_OFFSET		0x100000  #define CONFIG_SYS_MPC85xx_DMA2_OFFSET		0x101000 +#define CONFIG_SYS_MPC85xx_DMA3_OFFSET		0x102000  #define CONFIG_SYS_MPC85xx_DMA_OFFSET		CONFIG_SYS_MPC85xx_DMA1_OFFSET  #define CONFIG_SYS_MPC85xx_ESPI_OFFSET		0x110000  #define CONFIG_SYS_MPC85xx_ESDHC_OFFSET		0x114000 diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h index 81f9d38e7..831804c5c 100644 --- a/arch/powerpc/include/asm/processor.h +++ b/arch/powerpc/include/asm/processor.h @@ -1127,6 +1127,8 @@  #define SVR_T1020	0x852100  #define SVR_T1021	0x852101  #define SVR_T1022	0x852102 +#define SVR_T2080	0x853000 +#define SVR_T2081	0x853100  #define SVR_8610	0x80A000  #define SVR_8641	0x809000 diff --git a/drivers/net/fm/Makefile b/drivers/net/fm/Makefile index d0fd7fcce..ee5d76893 100644 --- a/drivers/net/fm/Makefile +++ b/drivers/net/fm/Makefile @@ -28,6 +28,8 @@ obj-$(CONFIG_PPC_T1040) += t1040.o  obj-$(CONFIG_PPC_T1042)	+= t1040.o  obj-$(CONFIG_PPC_T1020)	+= t1040.o  obj-$(CONFIG_PPC_T1022)	+= t1040.o +obj-$(CONFIG_PPC_T2080) += t2080.o +obj-$(CONFIG_PPC_T2081) += t2080.o  obj-$(CONFIG_PPC_T4240) += t4240.o  obj-$(CONFIG_PPC_T4160) += t4240.o  obj-$(CONFIG_PPC_B4420) += b4860.o diff --git a/drivers/net/fm/t2080.c b/drivers/net/fm/t2080.c new file mode 100644 index 000000000..b5c1e9f76 --- /dev/null +++ b/drivers/net/fm/t2080.c @@ -0,0 +1,91 @@ +/* + * Copyright 2012 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_DTSEC5] = FSL_CORENET_DEVDISR2_DTSEC1_5, +	[FM1_DTSEC6] = FSL_CORENET_DEVDISR2_DTSEC1_6, +	[FM1_DTSEC9] = FSL_CORENET_DEVDISR2_DTSEC1_9, +	[FM1_DTSEC10] = FSL_CORENET_DEVDISR2_DTSEC1_10, +	[FM1_10GEC1] = FSL_CORENET_DEVDISR2_10GEC1_1, +	[FM1_10GEC2] = FSL_CORENET_DEVDISR2_10GEC1_2, +	[FM1_10GEC3] = FSL_CORENET_DEVDISR2_10GEC1_3, +	[FM1_10GEC4] = FSL_CORENET_DEVDISR2_10GEC1_4, +}; + +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 || port == FM1_10GEC2 || +	     port == FM1_10GEC3 || port == FM1_10GEC4) && +	    ((is_serdes_configured(XAUI_FM1_MAC9))	|| +	     (is_serdes_configured(XFI_FM1_MAC1))	|| +	     (is_serdes_configured(XFI_FM1_MAC2))	|| +	     (is_serdes_configured(XFI_FM1_MAC9))	|| +	     (is_serdes_configured(XFI_FM1_MAC10)))) +		return PHY_INTERFACE_MODE_XGMII; + +	if ((port == FM1_DTSEC3) && ((rcwsr13 & FSL_CORENET_RCWSR13_EC1) == +		FSL_CORENET_RCWSR13_EC1_DTSEC3_RGMII)) +		return PHY_INTERFACE_MODE_RGMII; + +	if ((port == FM1_DTSEC4) && ((rcwsr13 & FSL_CORENET_RCWSR13_EC2) == +		FSL_CORENET_RCWSR13_EC2_DTSEC4_RGMII)) +		return PHY_INTERFACE_MODE_RGMII; + +	if ((port == FM1_DTSEC10) && ((rcwsr13 & FSL_CORENET_RCWSR13_EC2) == +		FSL_CORENET_RCWSR13_EC2_DTSEC10_RGMII)) +		return PHY_INTERFACE_MODE_RGMII; + +	switch (port) { +	case FM1_DTSEC1: +	case FM1_DTSEC2: +	case FM1_DTSEC3: +	case FM1_DTSEC4: +	case FM1_DTSEC5: +	case FM1_DTSEC6: +	case FM1_DTSEC9: +	case FM1_DTSEC10: +		if (is_serdes_configured(SGMII_FM1_DTSEC1 + port - FM1_DTSEC1)) +			return PHY_INTERFACE_MODE_SGMII; +		break; +	default: +		return PHY_INTERFACE_MODE_NONE; +	} + +	return PHY_INTERFACE_MODE_NONE; +} |