From patchwork Thu Oct 15 13:02:40 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gong Qianyu X-Patchwork-Id: 530687 X-Patchwork-Delegate: yorksun@freescale.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id DEA531402BF for ; Fri, 16 Oct 2015 00:12:54 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id F1B574B7FE; Thu, 15 Oct 2015 15:11:03 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6ii0ykofUKw7; Thu, 15 Oct 2015 15:11:03 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 293F04B7C6; Thu, 15 Oct 2015 15:10:47 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 79D174B788 for ; Thu, 15 Oct 2015 15:10:23 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id v_Qf-Yyt-Mvo for ; Thu, 15 Oct 2015 15:10:23 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1bbn0107.outbound.protection.outlook.com [157.56.111.107]) by theia.denx.de (Postfix) with ESMTPS id 17D284B752 for ; Thu, 15 Oct 2015 15:10:04 +0200 (CEST) Received: from CH1PR03CA008.namprd03.prod.outlook.com (10.255.156.153) by BN3PR03MB1477.namprd03.prod.outlook.com (10.163.35.140) with Microsoft SMTP Server (TLS) id 15.1.300.14; Thu, 15 Oct 2015 13:10:01 +0000 Received: from BN1AFFO11FD037.protection.gbl (10.255.156.132) by CH1PR03CA008.outlook.office365.com (10.255.156.153) with Microsoft SMTP Server (TLS) id 15.1.300.14 via Frontend Transport; Thu, 15 Oct 2015 13:10:01 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; freescale.mail.onmicrosoft.com; dmarc=none action=none header.from=freescale.com; Received-SPF: Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BN1AFFO11FD037.mail.protection.outlook.com (10.58.52.241) with Microsoft SMTP Server (TLS) id 15.1.293.9 via Frontend Transport; Thu, 15 Oct 2015 13:10:00 +0000 Received: from titan.ap.freescale.net ([10.192.208.233]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id t9FD95wh032237; Thu, 15 Oct 2015 06:09:57 -0700 From: Gong Qianyu To: Date: Thu, 15 Oct 2015 21:02:40 +0800 Message-ID: <1444914162-34502-16-git-send-email-Qianyu.Gong@freescale.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1444914162-34502-1-git-send-email-Qianyu.Gong@freescale.com> References: <1444914162-34502-1-git-send-email-Qianyu.Gong@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD037; 1:ZFOMcaOqWBkGmZZXkuDbujwiabPQFk13Q8G5+BlGzL+ZywnVCZx8GLlOOm4BbnRIhuOt4YW06uBdD4Js2V+dATwurQKpr7R+tJqBmZc2TxoWn5NslLIvycHEkgntUU9z35hJgHmh3cPwB5/iYmOiIj03RbyknYwLfXaXj87wofa1/UaT1tOrTNCOBPPdv9WQuFFvLETRpoTzoYTCNb1c0cdNSrgt4niwN0DeM4p0GFU+XvPZSMqUqITg6ZNtELhiTgcKVWEMaWNVivuo4iSoKQeEdA3zjDAJxHswOHc30HfQeHiIuEvj2rFWj6LF3nFSY2tFsJQ5Y79xnbec+m0HDhoVmdWZn/ilgOKGACk1MgNCPtmjqGOTq+o62No66F4LGSccoouGSBaHP+guhtEAYw== X-Forefront-Antispam-Report: CIP:192.88.158.2; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(189998001)(6806005)(50466002)(5008740100001)(47776003)(229853001)(110136002)(48376002)(5001960100002)(2351001)(450100001)(46102003)(92566002)(11100500001)(64706001)(104016004)(36756003)(5007970100001)(5003940100001)(107886002)(85426001)(86362001)(77096005)(87936001)(19580395003)(2950100001)(19580405001)(69596002)(575784001)(76176999)(50226001)(50986999)(97736004)(81156007)(105606002)(106466001)(4001430100001); DIR:OUT; SFP:1102; SCL:1; SRVR:BN3PR03MB1477; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BN3PR03MB1477; 2:1qly88JKA1+8pfaKO3kmilQvoPXSmmQE9eutqa6RhlXCg2FM6GZM1snxoCJKDjOf+Bz8hY+HQ4isPEtSFcrdsTk+6RtDdAtX4Vq/ibY6SIQJPV2+/ZeLz0fO2loSWCv7v7CkpumXeBriYNP125/8pGQhNhzL/j8aRrYvRpOwWsU=; 3:hc9oKC5A3WVxGiwjC3yI5Js9aaFmLh7YCwwSN5fWvhhoKk+760c3PYUnP7KfkXRHoRxqQwibe0syrVkaN0zw3qCWHhiVacPVePbaz6O2/h1sw5j+L7w92ZSWMAZD5tvAmljmEX9+3OIL1EU8Di+WbESTFM2FjcbmFaoDbqR4uDEa0wUXMv53d7CccdD97ML/E6KsVf++WNnUBZ/JpDYB3QJkdTa9yHYOCND7A2Cj0x0=; 25:msFyor467ttwdQ4SAmx+Qew5jbBp8WGYdEzUEfxhKIuqblOSkfXjSoh2/mDNnEjyN5cuMq9n/vCHz2EBExCz1Bg/Rwg4tALKoR5l23GSZIQSvJ2ldStR9fTs2uZ6+b+wPwsgFstXGzCKEd990/abQnPr2yoFd3RLIA5w3FoHPH3s0919WMN2VbjwRscV7J5TblmlSJzqdLE149vGlMxsqby2gARBHFCreyVr502hEgF3K9EsFR3CkUJiAEekqFlvnVqTym1OXbOvtHSE5M/t+Q== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN3PR03MB1477; X-Microsoft-Exchange-Diagnostics: 1; BN3PR03MB1477; 20:Ca4fI8XD2MuspZNF/WAYMggc1mgL/geVIu3ELaU+gyEi3Ip+T7GQX99Jj5ryksdpL+3Tj9qMan9xFR8MNVfe8uwjYo8zQDuIVSpGE+GqKIcOkT0Ql7vLUctSYyF0jzTp2gbKVP2TZIw9wtXavLAW95GCo2RWV0ouHh/w5hM7v5bLXP2J0Nt9RPSmrtkKpGMB7YFCQT5m3seJ720n8N3vG1y8FURNPAau9N7x7k1jr7MtdJVVe7h/3TgclKBuKf4YeDa7nSejwANrCLq+Wa3hFGY8Uccxz/75+0kPc2D3+5ZljthfIkURvY3uEuEU3OCCRnI2HbbSDTy3/I55rTJ/1v7YDXnHD/oWCNVb+TfOzuU=; 4:s6935tSel5op+mJCWY9Q6GjA5Slh2q9vGDy4RKvTf6SV4W0uPNPi5mxyZoUWEGSG2tBEUnM4XX+T+RIktA+SbfpUhUPJLK5aEEu+rT+Or3hREiml3quL4D5mANABCzVKdoaVZa6rjVkU/W93B9Cz4dbpeauLXLDX+aKPB4wXBmxnDX0L/ErnqHeseeHfd9ahjDivsOQeSK+M5EsHEGqKdTk6Dt2KyV/YgECEDO5h/V7wTB8u+Hzj9WafXxukG04ADNRCgka0nIKfnLFc8UKa5aFCSHgE5FZIewmygOTehbU0J7nUC5cBW0CyBrdL78MTecVdpcLM81FRjZt2TV6SFKIz13k00JgsFBTUEHkUZts= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(520078)(3002001); SRVR:BN3PR03MB1477; BCL:0; PCL:0; RULEID:; SRVR:BN3PR03MB1477; X-Forefront-PRVS: 0730093765 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR03MB1477; 23:j/RJ0Qwyf678r65cU3sZZAa2u1KCF+ZZb7HOd7FGw?= =?us-ascii?Q?XFwlka05tW2xqA0aA+tvlvSwHRh/wu2vaE+lEFDNTrzPM+EVY1v5rZNBuwGs?= =?us-ascii?Q?rSbPnv7mlN/Zy1O0UJKPJBN87xUNT38l2xnAtRr/icd0PWBGbHa34umasEM7?= =?us-ascii?Q?ZsaE5azgYb/G+uGWYtOvSpHgcYsmD7NTNw78PbxT/3UDGRYItGzcHTPn9eY3?= =?us-ascii?Q?I2fZK0GfWHryxxevZc9ryqG+loRp+a67HEF1421SjIDoZK1MSqI+3Qco/fSb?= =?us-ascii?Q?wjE0rvX2K/a2wouJatEJwywgWam4wHBw0qClK2XtCLF4KmMYg8zOk5K6NCrl?= =?us-ascii?Q?XAa3WuUzeoe84S9thjLCsatcxbm4a4F7hivV97PNrztjx0BBHbPBLi9pBQOk?= =?us-ascii?Q?L3p9y4G+vfRXqyFBbOow74b2bAyVObgVkqsJRA2aT5eJu6kD3QCtK6n2xY/k?= =?us-ascii?Q?Ftm0EoTsFWqN+N69m4E2mbima6Tjh2rEzClTElSQ6gc0joGmpFTAQfa0MGcb?= =?us-ascii?Q?j36gUPKRIZEK2CXwzXxIgcLMtgycDNYGa7xwvnKGL1BwSa+HJNk/a7hdZhJ+?= =?us-ascii?Q?TeEWy7ElZl1BP96OgXGsvT9z5HgaNU2rMQjjd+HO9x+LeS61yQGwic6C1hdg?= =?us-ascii?Q?VuW2z6T/2nfcUFhbYCrj90C2y0WZ6yPks/GPzI0qStQ0xXF0BK4XY55w9CAn?= =?us-ascii?Q?SOBIONW3ZA+lFxjHBm54xxVZl3vfpwkkUpcoxDop2bcQtFgSHQgiwdBP6pDJ?= =?us-ascii?Q?oFZROZYNfz8imHOVAkncI/+YcM8kYO+BdkIY0d1qTKW19XX8gn2/NW0DlNFr?= =?us-ascii?Q?awXZOdU97iByv5wk5AHrdrx7XwC7birMLTQWt01xPmkwMCQqge0lnV+H+4b6?= =?us-ascii?Q?Mi6RFASC9QRbM4nfXti4uo68xrz58bEj2BcHAEnCQULVR0X9KFtWEumjZ/7h?= =?us-ascii?Q?gyRaR+iSxucvCDL4Wh09iIutBsY4lElSyydg6G2q7TG7YH69/W2O1BO0Z3SH?= =?us-ascii?Q?DkD85veaZ9BiGUD8FksWGJ4z7uXZQDno3bx6W4aGgqV/C8E2paXolklIbeX7?= =?us-ascii?Q?x5rQaPytSq4FLszZycCbziXxRAk1bQXdU0GNvo0zgZZiCeWb6L4MBXwIUnRJ?= =?us-ascii?Q?JeNUv+A3Tp7oltTd2NxlrbljYBzEXp/8bM88gio0GnDujnIwnm5KVYatZHSL?= =?us-ascii?Q?sD1IdykYAcdbms=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN3PR03MB1477; 5:sgHeDtcDfRXCHrKjyeuZNnrNSpQnqBh29CxmsoV4psNR2HvCYopzaSDRLlr1AQ05Lmr2dY0NNQqq1kN49O42Xx37V5GRIX4aA65eOer13P0k4HLo9WWYg/q6nYAMXFpxg9YDBLaGiNSnlnT4KK7gOw==; 24:amrCy9p5WYlKKnZt5wOc4ZK3SRCRjCSYZr1FHRwNR+ti16369ho2U4DjltqpwMR0nuGOmWZdItNNyp2k+kX7BbhUkDnoVr40gjHIy9WGVS0=; 20:bIb3WPwyAQ6bcWxkCMweyVaxFKH4hABt2LZuYCGy0iAhypFZVX6bfM6zyBeqeblTKpPGiCmssB07MyojXDiGrQ== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Oct 2015 13:10:00.8120 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR03MB1477 Cc: B07421@freescale.com, Gong Qianyu , alison.wang@freescale.com, B48286@freescale.com, Wenbin.Song@freescale.com Subject: [U-Boot] [Patch V5 15/17] armv8/ls1043a: Add Fman support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Shaohui Xie Signed-off-by: Hou Zhiqiang Signed-off-by: Shaohui Xie Signed-off-by: Mingkai Hu Signed-off-by: Gong Qianyu --- V5: - No change. V4: - Change arch to layerscape. V3: - No change. V2: - No change. arch/arm/cpu/armv8/fsl-layerscape/cpu.c | 12 +++ arch/arm/cpu/armv8/fsl-layerscape/fdt.c | 6 ++ .../arm/cpu/armv8/fsl-layerscape/fsl_lsch2_speed.c | 23 ++++ board/freescale/common/fman.c | 6 +- board/freescale/ls1043ardb/Makefile | 1 + board/freescale/ls1043ardb/eth.c | 77 +++++++++++++ board/freescale/ls1043ardb/ls1043ardb.c | 4 + doc/README.fsl-dpaa | 4 +- drivers/net/fm/Makefile | 1 + drivers/net/fm/init.c | 10 +- drivers/net/fm/ls1043.c | 119 +++++++++++++++++++++ include/configs/ls1043a_common.h | 12 +++ include/configs/ls1043ardb.h | 25 +++++ 13 files changed, 295 insertions(+), 5 deletions(-) diff --git a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c index 5a2d40f..d8c01a8 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c @@ -274,6 +274,9 @@ static inline void final_mmu_setup(void) flush_dcache_range(gd->arch.tlb_addr, gd->arch.tlb_addr + gd->arch.tlb_size); +#ifdef CONFIG_SYS_DPAA_FMAN + flush_dcache_all(); +#endif /* point TTBR to the new table */ el = current_el(); @@ -432,6 +435,9 @@ int print_cpuinfo(void) printf("\n Bus: %-4s MHz ", strmhz(buf, sysinfo.freq_systembus)); printf("DDR: %-4s MT/s", strmhz(buf, sysinfo.freq_ddrbus)); +#ifdef CONFIG_SYS_DPAA_FMAN + printf(" FMAN: %-4s MHz", strmhz(buf, sysinfo.freq_fman[0])); +#endif #ifdef CONFIG_FSL_LSCH3 printf(" DP-DDR: %-4s MT/s", strmhz(buf, sysinfo.freq_ddrbus2)); #endif @@ -468,6 +474,9 @@ int cpu_eth_init(bd_t *bis) #ifdef CONFIG_FSL_MC_ENET error = fsl_mc_ldpaa_init(bis); #endif +#ifdef CONFIG_FMAN_ENET + fm_standard_init(bis); +#endif return error; } @@ -485,6 +494,9 @@ int arch_early_init_r(void) #ifdef CONFIG_SYS_HAS_SERDES fsl_serdes_init(); #endif +#ifdef CONFIG_FMAN_ENET + fman_enet_init(); +#endif return 0; } diff --git a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c index aa88d34..9c841c2 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c @@ -18,6 +18,12 @@ #include #endif +int fdt_fixup_phy_connection(void *blob, int offset, phy_interface_t phyc) +{ + return fdt_setprop_string(blob, offset, "phy-connection-type", + phy_string_for_interface(phyc)); +} + #ifdef CONFIG_MP void ft_fixup_cpu(void *blob) { diff --git a/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch2_speed.c b/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch2_speed.c index ea3723f..9d5bbe7 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch2_speed.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch2_speed.c @@ -25,6 +25,9 @@ void get_sys_info(struct sys_info *sys_info) struct fsl_ifc ifc_regs = {(void *)CONFIG_SYS_IFC_ADDR, (void *)NULL}; u32 ccr; #endif +#ifdef CONFIG_SYS_DPAA_FMAN + u32 rcw_tmp; +#endif struct ccsr_clk *clk = (void *)(CONFIG_SYS_FSL_CLK_ADDR); unsigned int cpu; const u8 core_cplx_pll[8] = { @@ -79,6 +82,26 @@ void get_sys_info(struct sys_info *sys_info) #define HWA_CGA_M1_CLK_SEL 0xe0000000 #define HWA_CGA_M1_CLK_SHIFT 29 +#ifdef CONFIG_SYS_DPAA_FMAN + rcw_tmp = in_be32(&gur->rcwsr[7]); + switch ((rcw_tmp & HWA_CGA_M1_CLK_SEL) >> HWA_CGA_M1_CLK_SHIFT) { + case 2: + sys_info->freq_fman[0] = freq_c_pll[0] / 2; + break; + case 3: + sys_info->freq_fman[0] = freq_c_pll[0] / 3; + break; + case 6: + sys_info->freq_fman[0] = freq_c_pll[1] / 2; + break; + case 7: + sys_info->freq_fman[0] = freq_c_pll[1] / 3; + break; + default: + printf("Error: Unknown FMan1 clock select!\n"); + break; + } +#endif #define HWA_CGA_M2_CLK_SEL 0x00000007 #define HWA_CGA_M2_CLK_SHIFT 0 diff --git a/board/freescale/common/fman.c b/board/freescale/common/fman.c index 9dc5402..26cf517 100644 --- a/board/freescale/common/fman.c +++ b/board/freescale/common/fman.c @@ -1,5 +1,5 @@ /* - * Copyright 2011 Freescale Semiconductor, Inc. + * Copyright 2011-2015 Freescale Semiconductor, Inc. * * SPDX-License-Identifier: GPL-2.0+ */ @@ -10,7 +10,11 @@ #include #include +#ifdef CONFIG_FSL_LAYERSCAPE +#include +#else #include +#endif /* * Given the following ... diff --git a/board/freescale/ls1043ardb/Makefile b/board/freescale/ls1043ardb/Makefile index dd17e2e..5fe1cc9 100644 --- a/board/freescale/ls1043ardb/Makefile +++ b/board/freescale/ls1043ardb/Makefile @@ -7,3 +7,4 @@ obj-y += cpld.o obj-y += ddr.o obj-y += ls1043ardb.o +obj-$(CONFIG_SYS_DPAA_FMAN) += eth.o diff --git a/board/freescale/ls1043ardb/eth.c b/board/freescale/ls1043ardb/eth.c new file mode 100644 index 0000000..61f2b5d --- /dev/null +++ b/board/freescale/ls1043ardb/eth.c @@ -0,0 +1,77 @@ +/* + * Copyright 2015 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#include +#include +#include +#include +#include +#include +#include + +#include "../common/fman.h" + +int board_eth_init(bd_t *bis) +{ +#ifdef CONFIG_FMAN_ENET + int i; + struct memac_mdio_info dtsec_mdio_info; + struct memac_mdio_info tgec_mdio_info; + struct mii_dev *dev; + u32 srds_s1; + struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); + + srds_s1 = in_be32(&gur->rcwsr[4]) & + FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_MASK; + srds_s1 >>= FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_SHIFT; + + dtsec_mdio_info.regs = + (struct memac_mdio_controller *)CONFIG_SYS_FM1_DTSEC_MDIO_ADDR; + + dtsec_mdio_info.name = DEFAULT_FM_MDIO_NAME; + + /* Register the 1G MDIO bus */ + fm_memac_mdio_init(bis, &dtsec_mdio_info); + + tgec_mdio_info.regs = + (struct memac_mdio_controller *)CONFIG_SYS_FM1_TGEC_MDIO_ADDR; + tgec_mdio_info.name = DEFAULT_FM_TGEC_MDIO_NAME; + + /* Register the 10G MDIO bus */ + fm_memac_mdio_init(bis, &tgec_mdio_info); + + /* Set the two on-board RGMII PHY address */ + fm_info_set_phy_address(FM1_DTSEC3, RGMII_PHY1_ADDR); + fm_info_set_phy_address(FM1_DTSEC4, RGMII_PHY2_ADDR); + + /* QSGMII on lane B, MAC 1/2/5/6 */ + fm_info_set_phy_address(FM1_DTSEC1, QSGMII_PORT1_PHY_ADDR); + fm_info_set_phy_address(FM1_DTSEC2, QSGMII_PORT2_PHY_ADDR); + fm_info_set_phy_address(FM1_DTSEC5, QSGMII_PORT3_PHY_ADDR); + fm_info_set_phy_address(FM1_DTSEC6, QSGMII_PORT4_PHY_ADDR); + + switch (srds_s1) { + case 0x1455: + break; + default: + printf("Invalid SerDes protocol 0x%x for LS1043ARDB\n", + srds_s1); + break; + } + + dev = miiphy_get_dev_by_name(DEFAULT_FM_MDIO_NAME); + for (i = FM1_DTSEC1; i < FM1_DTSEC1 + CONFIG_SYS_NUM_FM1_DTSEC; i++) + fm_info_set_mdio(i, dev); + + /* XFI on lane A, MAC 9 */ + fm_info_set_phy_address(FM1_10GEC1, FM1_10GEC1_PHY_ADDR); + dev = miiphy_get_dev_by_name(DEFAULT_FM_TGEC_MDIO_NAME); + fm_info_set_mdio(FM1_10GEC1, dev); + + cpu_eth_init(bis); +#endif + + return pci_eth_init(bis); +} diff --git a/board/freescale/ls1043ardb/ls1043ardb.c b/board/freescale/ls1043ardb/ls1043ardb.c index 5b7f814..6c0dd3f 100644 --- a/board/freescale/ls1043ardb/ls1043ardb.c +++ b/board/freescale/ls1043ardb/ls1043ardb.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -108,6 +109,9 @@ int ft_board_setup(void *blob, bd_t *bd) { ft_cpu_setup(blob, bd); +#ifdef CONFIG_SYS_DPAA_FMAN + fdt_fixup_fman_ethernet(blob); +#endif return 0; } diff --git a/doc/README.fsl-dpaa b/doc/README.fsl-dpaa index 0d8d4f6..3ef5eeb 100644 --- a/doc/README.fsl-dpaa +++ b/doc/README.fsl-dpaa @@ -2,9 +2,9 @@ This file documents Freescale DPAA-specific options. FMan (Frame Manager) - CONFIG_FSL_FM_10GEC_REGULAR_NOTATION - on SoCs earlier(e.g. T4240, T2080), the notation between 10GEC and MAC as below: + on SoCs T4240, T2080, LS1043A, etc, the notation between 10GEC and MAC as below: 10GEC1->MAC9, 10GEC2->MAC10, 10GEC3->MAC1, 10GEC4->MAC2 - on SoCs later(e.g. T1024, etc), the notation between 10GEC and MAC as below: + on SoCs T1024, etc, the notation between 10GEC and MAC as below: 10GEC1->MAC1, 10GEC2->MAC2 so we introduce CONFIG_FSL_FM_10GEC_REGULAR_NOTATION to identify the new SoCs on which 10GEC enumeration is consistent with MAC enumeration. diff --git a/drivers/net/fm/Makefile b/drivers/net/fm/Makefile index d052fcb..a3c9f99 100644 --- a/drivers/net/fm/Makefile +++ b/drivers/net/fm/Makefile @@ -37,3 +37,4 @@ obj-$(CONFIG_PPC_T4160) += t4240.o obj-$(CONFIG_PPC_T4080) += t4240.o obj-$(CONFIG_PPC_B4420) += b4860.o obj-$(CONFIG_PPC_B4860) += b4860.o +obj-$(CONFIG_LS1043A) += ls1043.o diff --git a/drivers/net/fm/init.c b/drivers/net/fm/init.c index b3ff4c5..3a1de59 100644 --- a/drivers/net/fm/init.c +++ b/drivers/net/fm/init.c @@ -1,13 +1,17 @@ /* - * Copyright 2011 Freescale Semiconductor, Inc. + * Copyright 2011-2015 Freescale Semiconductor, Inc. * * SPDX-License-Identifier: GPL-2.0+ */ #include #include #include -#include #include +#ifdef CONFIG_FSL_LAYERSCAPE +#include +#else +#include +#endif #include "fm.h" @@ -153,7 +157,9 @@ void fm_disable_port(enum fm_port port) return; fm_info[i].enabled = 0; +#ifndef CONFIG_SYS_FMAN_V3 fman_disable_port(port); +#endif } void fm_enable_port(enum fm_port port) diff --git a/drivers/net/fm/ls1043.c b/drivers/net/fm/ls1043.c new file mode 100644 index 0000000..cf2cc95 --- /dev/null +++ b/drivers/net/fm/ls1043.c @@ -0,0 +1,119 @@ +/* + * Copyright 2015 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#include +#include +#include +#include +#include + +#define FSL_CHASSIS2_RCWSR13_EC1 0xe0000000 /* bits 416..418 */ +#define FSL_CHASSIS2_RCWSR13_EC1_DTSEC3_RGMII 0x00000000 +#define FSL_CHASSIS2_RCWSR13_EC1_GPIO 0x20000000 +#define FSL_CHASSIS2_RCWSR13_EC1_FTM 0xa0000000 +#define FSL_CHASSIS2_RCWSR13_EC2 0x1c000000 /* bits 419..421 */ +#define FSL_CHASSIS2_RCWSR13_EC2_DTSEC4_RGMII 0x00000000 +#define FSL_CHASSIS2_RCWSR13_EC2_GPIO 0x04000000 +#define FSL_CHASSIS2_RCWSR13_EC2_1588 0x08000000 +#define FSL_CHASSIS2_RCWSR13_EC2_FTM 0x14000000 + +u32 port_to_devdisr[] = { + [FM1_DTSEC1] = FSL_CHASSIS2_DEVDISR2_DTSEC1_1, + [FM1_DTSEC2] = FSL_CHASSIS2_DEVDISR2_DTSEC1_2, + [FM1_DTSEC3] = FSL_CHASSIS2_DEVDISR2_DTSEC1_3, + [FM1_DTSEC4] = FSL_CHASSIS2_DEVDISR2_DTSEC1_4, + [FM1_DTSEC5] = FSL_CHASSIS2_DEVDISR2_DTSEC1_5, + [FM1_DTSEC6] = FSL_CHASSIS2_DEVDISR2_DTSEC1_6, + [FM1_DTSEC9] = FSL_CHASSIS2_DEVDISR2_DTSEC1_9, + [FM1_DTSEC10] = FSL_CHASSIS2_DEVDISR2_DTSEC1_10, + [FM1_10GEC1] = FSL_CHASSIS2_DEVDISR2_10GEC1_1, + [FM1_10GEC2] = FSL_CHASSIS2_DEVDISR2_10GEC1_2, + [FM1_10GEC3] = FSL_CHASSIS2_DEVDISR2_10GEC1_3, + [FM1_10GEC4] = FSL_CHASSIS2_DEVDISR2_10GEC1_4, +}; + +static int is_device_disabled(enum fm_port port) +{ + struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); + u32 devdisr2 = in_be32(&gur->devdisr2); + + return port_to_devdisr[port] & devdisr2; +} + +void fman_disable_port(enum fm_port port) +{ + struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); + + setbits_be32(&gur->devdisr2, port_to_devdisr[port]); +} + +phy_interface_t fman_port_enet_if(enum fm_port port) +{ + struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); + u32 rcwsr13 = in_be32(&gur->rcwsr[13]); + + if (is_device_disabled(port)) { + printf("%s:%d: port(%d) is disabled\n", __func__, + __LINE__, port); + return PHY_INTERFACE_MODE_NONE; + } + + if ((port == FM1_10GEC1) && (is_serdes_configured(XFI_FM1_MAC9))) + return PHY_INTERFACE_MODE_XGMII; + + if ((port == FM1_DTSEC9) && (is_serdes_configured(XFI_FM1_MAC9))) + return PHY_INTERFACE_MODE_NONE; + + if (port == FM1_DTSEC3) + if ((rcwsr13 & FSL_CHASSIS2_RCWSR13_EC1) == + FSL_CHASSIS2_RCWSR13_EC1_DTSEC3_RGMII) { + printf("%s:%d: port(FM1_DTSEC3) is OK\n", + __func__, __LINE__); + return PHY_INTERFACE_MODE_RGMII; + } + if (port == FM1_DTSEC4) + if ((rcwsr13 & FSL_CHASSIS2_RCWSR13_EC2) == + FSL_CHASSIS2_RCWSR13_EC2_DTSEC4_RGMII) { + printf("%s:%d: port(FM1_DTSEC4) is OK\n", + __func__, __LINE__); + return PHY_INTERFACE_MODE_RGMII; + } + + /* handle SGMII */ + switch (port) { + case FM1_DTSEC1: + case FM1_DTSEC2: + if ((port == FM1_DTSEC2) && + is_serdes_configured(SGMII_2500_FM1_DTSEC2)) + return PHY_INTERFACE_MODE_SGMII_2500; + case FM1_DTSEC5: + case FM1_DTSEC6: + case FM1_DTSEC9: + if (is_serdes_configured(SGMII_FM1_DTSEC1 + port - FM1_DTSEC1)) + return PHY_INTERFACE_MODE_SGMII; + else if ((port == FM1_DTSEC9) && + is_serdes_configured(SGMII_2500_FM1_DTSEC9)) + return PHY_INTERFACE_MODE_SGMII_2500; + break; + default: + break; + } + + /* handle QSGMII */ + switch (port) { + case FM1_DTSEC1: + case FM1_DTSEC2: + case FM1_DTSEC5: + case FM1_DTSEC6: + /* only MAC 1,2,5,6 available for QSGMII */ + if (is_serdes_configured(QSGMII_FM1_A)) + return PHY_INTERFACE_MODE_QSGMII; + break; + default: + break; + } + + return PHY_INTERFACE_MODE_NONE; +} diff --git a/include/configs/ls1043a_common.h b/include/configs/ls1043a_common.h index beedcb3..146eed1 100644 --- a/include/configs/ls1043a_common.h +++ b/include/configs/ls1043a_common.h @@ -162,6 +162,18 @@ #define CONFIG_CMD_ENV #define CONFIG_CMD_PING +/* FMan ucode */ +#define CONFIG_SYS_DPAA_FMAN +#ifdef CONFIG_SYS_DPAA_FMAN +#define CONFIG_SYS_FM_MURAM_SIZE 0x60000 + +#define CONFIG_SYS_QE_FMAN_FW_IN_NOR +/* FMan fireware Pre-load address */ +#define CONFIG_SYS_FMAN_FW_ADDR 0x60300000 +#define CONFIG_SYS_QE_FMAN_FW_LENGTH 0x10000 +#define CONFIG_SYS_FDT_PAD (0x3000 + CONFIG_SYS_QE_FMAN_FW_LENGTH) +#endif + /* Miscellaneous configurable options */ #define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_DDR_SDRAM_BASE + 0x10000000) #define CONFIG_ARCH_EARLY_INIT_R diff --git a/include/configs/ls1043ardb.h b/include/configs/ls1043ardb.h index 8ac752e..c776640 100644 --- a/include/configs/ls1043ardb.h +++ b/include/configs/ls1043ardb.h @@ -234,4 +234,29 @@ #define CONFIG_ENV_SIZE 0x20000 #endif +/* FMan */ +#ifdef CONFIG_SYS_DPAA_FMAN +#define CONFIG_FMAN_ENET +#define CONFIG_CMD_MII +#define CONFIG_PHYLIB +#define CONFIG_PHYLIB_10G +#define CONFIG_PHY_GIGE /* Include GbE speed/duplex detection */ + +#define CONFIG_PHY_VITESSE +#define CONFIG_PHY_REALTEK +#define CONFIG_PHY_AQUANTIA + +#define RGMII_PHY1_ADDR 0x1 +#define RGMII_PHY2_ADDR 0x2 + +#define QSGMII_PORT1_PHY_ADDR 0x4 +#define QSGMII_PORT2_PHY_ADDR 0x5 +#define QSGMII_PORT3_PHY_ADDR 0x6 +#define QSGMII_PORT4_PHY_ADDR 0x7 + +#define FM1_10GEC1_PHY_ADDR 0x1 + +#define CONFIG_ETHPRIME "FM1@DTSEC3" +#endif + #endif /* __LS1043ARDB_H__ */