From patchwork Mon Dec 19 05:11:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Priyanka Jain X-Patchwork-Id: 706941 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 3thptJ6LJZz9t1H for ; Mon, 19 Dec 2016 16:11:35 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id A55A3B384C; Mon, 19 Dec 2016 06:11:30 +0100 (CET) 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 qiwwUno-d1JN; Mon, 19 Dec 2016 06:11:30 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 20858A75C3; Mon, 19 Dec 2016 06:11:30 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 029EAA75C3 for ; Mon, 19 Dec 2016 06:11:26 +0100 (CET) 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 oCOI8tn69Fnj for ; Mon, 19 Dec 2016 06:11:25 +0100 (CET) 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 NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0053.outbound.protection.outlook.com [104.47.32.53]) by theia.denx.de (Postfix) with ESMTPS id 2987BA75BF for ; Mon, 19 Dec 2016 06:11:21 +0100 (CET) Received: from BN3PR0301CA0034.namprd03.prod.outlook.com (10.160.180.172) by DM2PR0301MB0750.namprd03.prod.outlook.com (10.160.97.146) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.771.8; Mon, 19 Dec 2016 05:11:19 +0000 Received: from BN1AFFO11FD027.protection.gbl (2a01:111:f400:7c10::107) by BN3PR0301CA0034.outlook.office365.com (2a01:111:e400:4000::44) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.789.14 via Frontend Transport; Mon, 19 Dec 2016 05:11:18 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none; nxp.com; dmarc=fail action=none header.from=nxp.com; nxp.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of nxp.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 BN1AFFO11FD027.mail.protection.outlook.com (10.58.52.87) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.789.10 via Frontend Transport; Mon, 19 Dec 2016 05:11:18 +0000 Received: from b32167-VirtualBox.am.freescale.net ([10.214.249.222]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id uBJ5B8qU006533; Sun, 18 Dec 2016 22:11:14 -0700 From: Priyanka Jain To: , Date: Mon, 19 Dec 2016 10:41:07 +0530 Message-ID: <1482124267-2343-1-git-send-email-priyanka.jain@nxp.com> X-Mailer: git-send-email 1.7.4.1 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131265978785578124; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(336005)(39400400002)(39850400002)(39860400002)(39410400002)(39380400002)(39450400003)(39840400002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(85426001)(305945005)(6636002)(6666003)(4720700003)(5003940100001)(8666005)(47776003)(15650500001)(77096006)(105606002)(356003)(106466001)(38730400001)(8676002)(626004)(104016004)(5660300001)(8936002)(5001770100001)(2906002)(97736004)(81166006)(81156014)(50226002)(86362001)(92566002)(68736007)(4326007)(36756003)(33646002)(48376002)(50466002)(189998001)(69596002)(50986999)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR0301MB0750; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD027; 1:AloKUUgdBqCkXSTNu1clTNV++yTXGHc3wAqDPy4vwSjtLXpLyLDqq6GtSYyNPPZ6NRsrS5w3eAXt5VxRa7mrpkU6bRRv2OZwblgm1pwEeXPgsdHywrbMbB4UAHHFD5dRV6uGKTI0Flo7691HgaqX5CAiy8jCTmn4N0+TxbdldJ3W547bWD9I4WmTTHNZyyUblWkSTIUa3gAK75IGqq8/uu4MLvX2SvTRT/iKwxQrWmbi4JwFDE7BasJYV9IueC4R5ylxWcQyxJ947TMl55JQBe9RfjeUB0A5GDYm8CsesfEa9/EUs++08ckyVACsuzCHkqEERktCmFwnSIUm0na0LGJR7l2QyL/84fryGqzyuWLdihLoANaSy2Q6Mz6k6mA4AEGGc9mpN+6QquiAc29Eueeie+wkfrLIMWYO2dVC/whNt3muXmN7DOkj5ESqQtmmIjANGqFDICEOkt31VLwTDnI35WAwslcxP5nGxz+UWppB9/3AbAyZ7ZnQgyCmqsEk11n35Bb01NKUIllXFuTrXkGQ+6ZgMMoT/J7KrXbWDoY1/A/ZFBEwj9Cgab8PuUTVtPBOEDT+T5AkOJJTp8pOQUuu5U44Ff4OomUFcLZDC6BuY4QrptYkR5+HTGx3wM8xmbhnMG6Yc4EH/rOdhfd0wIgTyy7WjiF2fCrAmkQoZ1fnYf6BfvAYC95nMdyK5lAmi0u2ZikBaVIGKtKgAeMUqeTb7dANQRjnYpMMIzjRTdU= MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: ba744c3c-12a3-4acc-b184-08d427cd76ff X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:DM2PR0301MB0750; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0750; 3:wf5QozhpyHygCZi1pxPBiOSTFmJwWqnb+UlO+Gmi0YK/WFMoIiik3nnwZgHDjDYRv/is/LIj4tU/crZemm7Rx4UDK3ZbjZZkLL5xtMpIIRcREff8j4p99k2k0lumRrXOsNjYqboijNdHSeaSY4bTrOddSDr3H1golPrsRIXUj4IqNDrCHgOqZQoIeYmtwY/pThKVrReB9oGYCck4CnFg0s/DiNEiNwibanP56o4Qp9TW7U96prWdT/nWgGHwFfu8vkfIPbRo/UoNcl8Olf74aHLmK8IcYXjJ/yiv8tkdMHuacJj9ULB/CJpRv2GQORjL6ncb5SR9Caxf+5r8S1kIIHAB/ts1MnoYRbQ7/PWDCJo=; 25:xpUZWAH2/+xqmHRXsJ4m53xpou/O1klmM2uqEAb05qPqGEzInCOdV5LcWUF6dAZLrS6HUQc89a5VLnP2dG/CjksuQ+QeAwQAQhUwa2/BlrnKwtRqgLsQLghn4YhrrfvDa+nEMjzyi1LgE7nNGufXhp+OxD2hKFiqROr7RTdcZILek7/sllhlhcDfAPFfXpDCRJyedyX39xfxxaaUg0L0BqUPqh5eYishV2YxbuMNF7CHNAo2cq3wFNEHkIfEBsj2sCnG4BzavabrQO70e6mFosz3Ctt7TzXs3hr9c/qxTWVuVjgmLhCjoSSFb2JLHjRmtk6hSmC4y3lfZpctEky2/VfQk9BUZmvK7NDMuULAFHR4Q3EekIvzqJ2vlQux027IpSPNgSRs+VbhU9ZqIGsLft1TOKonYDKh5H7tTM7Bmy6gwTMLq0gznicDKjEb+q5H83Ol1QNsoQU1j+wfi5dIdQ== X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0750; 31:Ra80yngDei3pEGT7TYLvllo28zA8/0l6i8gmopOWHXIM3cVXnJDNBZHAHVTvWAECGMMEXAWjIcdiU6asMbn1c9I49tUbUQpIIgs+AhQgUa/rWwf/zBxJLe42Z1BOdYu9l8h6XTUmNY4lcnvUMIAOxxgcWJrU9PdP126mfdS1dfpWmz80qDWmvKVuUicUQiV8+cggWbGwuFKJUYa4ciCnp8VthPuEdWnXGJov0N8CL7nj75ACbAye3aWKixmlp7mPMe51PKzLH/mwam4rc+zUEpxV8jcArv8NN3PHrWH75pE= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(275809806118684); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095060)(601004)(2401047)(5005006)(8121501046)(13024025)(13017025)(13015025)(13023025)(13018025)(3002001)(10201501046)(6055026)(6096035)(20161123556025)(20161123559025)(20161123563025)(20161123565025)(20161123561025); SRVR:DM2PR0301MB0750; BCL:0; PCL:0; RULEID:(400006); SRVR:DM2PR0301MB0750; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0750; 4:ZvyFkc5YZxtphYbKeSq2G+yxTB/I0QlrhNwQLb/hVvS4hYjrsTqCFQBXrS/DIPcjLZlJgfqXsNaNR7BVLgeiUMHy7It72qN5vyF+lJxfmk/0w1SRq1iFAfp2vLHdIibFqIFzJeobAB17L5skZF13vKuLjbTk6Ajlod85ApfNDwQz9nfJORIrTQbeX2DwGKwZBWmP7lcY52IbGZVJ0fv9IL41BL6j/IB3cOhBJaW6CPCLTCpkxf4DWdZA3IE92cNjWnZzn2SIUOeAJSSFejjZgRLQFf5wnkT9kex63OTOJsZf0zKiMCAjFtPSErExLSOplZLKtyjs2e+LdujevOkl+QuMMoHeXA2HcFxLF4tTN+9KVyZ4xCk7ydp2c+WVPu2l2bGK1NZdhwpC09WGeTZHF0qX2b25ERS+qzcg+WbfOpOwRYVTCjg3nb6R2z/ZImYogb6CiGNRz3INSjSUcqMmvhMCfJ7QIoT0oYu7OpxyqPhNT8pOIGdNOgNiaLEAi949z46zEPjrBxzmRC0dA6xuNpPqjKSisncstaKPsVhesWy47g5xbKk6Hkovr2S+Pxutcctapd/D+gOgkBLoKpeVxjT7wxbK3ED+eyJvMCHyMJ867tB6JxBjpYtllgBG77WRO0u1kXG4rFIlZsYaLNxtace5rIdTS4EM1fvZzZXvjYX9oRWtGPnldb7ZxHkjBok9ETcWMfkbyP4HJqrvvIMym9SP9MuE14uPzsmzaLZZ7dUWiG5//lTU5twRueDSa25Tkr3GKgYjfCDtSZUbuo81gA== X-Forefront-PRVS: 01613DFDC8 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR0301MB0750; 23:Wp7QcSvwgNU8Ulo/1nmuePLhwfUYZIJkFG67GTi?= =?us-ascii?Q?Y5PL3cemUBf5LxDHtJj5T5shR/O4/MyE4qMD8UR0BSCyiEO4VRRtYfi+z1Ho?= =?us-ascii?Q?9MDsvE1wfqLmGgzTyq6Ncc2VUa59AISDzO1jPsiBgEu/5O1ogxx6a+ii1H10?= =?us-ascii?Q?vJmuDiCv1aitENLg0jUji0K08ID8ZWpDCLT2wlkmKnLne0dTNMTYx+gLoLy0?= =?us-ascii?Q?Daw/bynaqvJAml9MtoL6ES58Q8JFBoVx6TimFdcN1SLbebzfmLLP4SylB47B?= =?us-ascii?Q?wp1s5eybDgazU4qL1fy34WoOFLCa7F0NGFw/ILkr+dBLSjUZ3OFp5xYzYgl5?= =?us-ascii?Q?cpZ2WZcak3hpCNzh3BTdp5efxsn/uyeDfo1iGnQekXjKBu5rPjRJxWosP3T3?= =?us-ascii?Q?rN8EqsoBBRpiSPekBi5TGHZ5ASnB0O816FQKinOjAhEvXmeVthOL4EBkRcDf?= =?us-ascii?Q?lhXhfnonsyes8PyMJwR/XLNPMbKkIj77t8vK7UwhUcjJnkgK7LnvAkskloro?= =?us-ascii?Q?RMeNiWPwFyf7Bk017MEH6ou1cL06SqTy084S05lpu/QQJrZ4phP29vw0c1jP?= =?us-ascii?Q?dZaRUvh3482NdGZeDE1dsOlOt9hWcu5LIh3oXxLtEeqhGn+HMtmwT72KPTcB?= =?us-ascii?Q?10Z6ZU7hPaIYDddbz4MOnqSjBw/Pm0h5RSzK03T2S5H3IbBhojOJbTyvh+dk?= =?us-ascii?Q?IvBgBSIkk/rLcYefejzxGFrxzMQUUOR1BhgwA2B9Hmfwmjdw2HgDC7I7fpae?= =?us-ascii?Q?S10JAqHvJYVXXSf1yN5W6n5O4dQIaJEAxyh4FY9N3tAWBshAinCYtoDUvuNM?= =?us-ascii?Q?Wbru2RtrUIyBMv1V35TeVEklUS5Xelaq1xt8Wh8ZqL60T8BgUlagS1Bdj2DW?= =?us-ascii?Q?AW+H7L+K10qnLjhdOxBdaKEKF8WPHnwwu/Yw85bd30dy7BqIJ4ZcDsq21V/J?= =?us-ascii?Q?T4bMPU0nKdYDn5VFFBMls5oPk0d5EhJmq1erovlJakbZX4SbKcHM9UDlBulS?= =?us-ascii?Q?t7S+IoAGiSQOV19h+CCAtunE65b3GM9co26TvIG9J0EbbOmLnPkafrJf0Dql?= =?us-ascii?Q?cxTSmVwCu2Zlaz6AITLbnzmBbJ/yFXdLRLhRiRCbLmEL+glKJVPdGCL28tDX?= =?us-ascii?Q?T8N/jBW4oja4QXf0MXJLCV7uyRGSbaK7pTahpBYDYc3y5yfhFs0nMci0w4wN?= =?us-ascii?Q?cvc4JSinTQS/5umlaszWxDQgnWAbL3rPilj9MwU3W4eDsKw8znUCJIGLLRmh?= =?us-ascii?Q?7d9R/3VfVd5p9qZ3c5IlCKZXpMyrwGIOw2cLeQykX48BGbKKrc8qt27/2tDX?= =?us-ascii?Q?VSTDjmCftM8X1tQm/4rmreWQ=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0750; 6:A6kS/0DmUipPAG2IXtMLtMhK+ByY05n/CPbVBSE3D/r7OHBlPSp2nH8znxEl/mACYpmohRx0LrOJuZ2/JqndEZHGf8dKNwqer/bpfKOatAB0ZsTWK8D89bq8OssnTvPbzkfxkjLPxfTl+ilpZ/enD9HRMI+i4JqG83cuqhFt5tiUCN9PXAyUhwDQ1A5fEny49GiZeGi7AICoqQQmd3ymPiZ9MIzt/8dbPdkgVbaaSq5cNiFmbN+BcdRB+NU1LHud8w56cjUymp2pbezJx7L00R6SbWuxxkax0GRdOW8LCoVf5wKe2v+2uMP5eGMjUNS0tR5tmPrttI+iZnE0bCRjLvhql7hdEIZNYxMmO76+hMefEGbHi1FRB1xq6Q1VgBezR8YT+am1cEZuHpVGhFlFD+rnL79zBFir+HYYqMC1mOgnhS4Cm2SqVi61F8MwJtQ9; 5:DN1g0NEYs4sdWze7kllpl/pHqIX5cgV2GFDqKPBRHeHOHceHagb199eAZ73qudri/qR0uZZKC2cNrtAQyrKI9LsV+nRnAY1zCNsSaB69X42v7uJyBG6BL6G/HCOh8VBWy23/ApyiPBIQ2oJ2ZKgy+iiEhMfuzL02j2uUwpX14daf9+u6ji8n0ZHbzCBm1ubE; 24:kQeGi0hRDLD2kJdIrjFH0mqwJWoViTX9gfR96iPgLpeLvZsiJR8OG6Z1COL2JNvTgbpC+am+yPOIij6VjZDB0PpgLJlvrtr0Ch6FD0n4PuY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0750; 7:VRtdQDjaqryf5/31dNysBX93mVSvOZkTLvPif+435JU624NU1KNSRCrXl206x/WR+PDkHGPCTEvUsr9jeHamzj3T/Sory/K2MIydlzCESub4BBfQwIiCVN0vfx2goyz7l6FqbMsPDyQnhwJ+Z/K34f2gXZO+TXuvd3DSWeLttuFqkD4al/R2r1qd+phuTg5ZC45PHN/m3nAaPTKCRJNLYfsol05b9asJv3R3HJON1O8nu5UhZAM+NCYxITHhvs7HPsOggod7ta9M3DponwiS6f7c/nsfmeK7AvLGpZS01EiOogrzqk4pi9G8LMN3u3XaBBgZvtbKZMR4ZqkgOLeHcbOGQr3nWAgBhsJoOMizcdEuyPE2/CC0ILoe3XnMQ26yHc64d/R0/aEBi/+jAX/B0GNiAXwT0SBTfUG+PVnpCHsQDgLlicARybC52U7OngFEPtRhUULg6bWYIealv9H8rg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Dec 2016 05:11:18.2146 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0301MB0750 Cc: Priyanka Jain Subject: [U-Boot] [PATCH] driver: net: fsl-mc: Update MC memory allocation code 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" Firmware of Management Complex (MC) should be loaded at 512MB aligned privately allocated memory at DRAM end. And this memory should be reduced from total memory available for general purposes. Update memory allocation code in MC driver to support above requirements. Signed-off-by: Priyanka Jain --- drivers/net/fsl-mc/mc.c | 98 +++++++++++++++++++++------------------------- 1 files changed, 45 insertions(+), 53 deletions(-) diff --git a/drivers/net/fsl-mc/mc.c b/drivers/net/fsl-mc/mc.c index 46b8a6b..df3f7fa 100644 --- a/drivers/net/fsl-mc/mc.c +++ b/drivers/net/fsl-mc/mc.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014 Freescale Semiconductor + * Copyright (C) 2014, 2016 Freescale Semiconductor * * SPDX-License-Identifier: GPL-2.0+ */ @@ -41,6 +41,7 @@ struct fsl_dpbp_obj *dflt_dpbp = NULL; struct fsl_dpio_obj *dflt_dpio = NULL; struct fsl_dpni_obj *dflt_dpni = NULL; static u64 mc_lazy_dpl_addr; +static u64 mc_ram_addr; #ifdef DEBUG void dump_ram_words(const char *title, void *addr) @@ -89,11 +90,11 @@ void dump_mc_ccsr_regs(struct mc_ccsr_registers __iomem *mc_ccsr_regs) * Copying MC firmware or DPL image to DDR */ static int mc_copy_image(const char *title, - u64 image_addr, u32 image_size, u64 mc_ram_addr) + u64 image_addr, u32 image_size, u64 mc_addr) { - debug("%s copied to address %p\n", title, (void *)mc_ram_addr); - memcpy((void *)mc_ram_addr, (void *)image_addr, image_size); - flush_dcache_range(mc_ram_addr, mc_ram_addr + image_size); + debug("%s copied to address %p\n", title, (void *)mc_addr); + memcpy((void *)mc_addr, (void *)image_addr, image_size); + flush_dcache_range(mc_addr, mc_addr + image_size); return 0; } @@ -156,16 +157,14 @@ int parse_mc_firmware_fit_image(u64 mc_fw_addr, /* * Calculates the values to be used to specify the address range * for the MC private DRAM block, in the MCFBALR/MCFBAHR registers. - * It returns the highest 512MB-aligned address within the given - * address range, in '*aligned_base_addr', and the number of 256 MiB - * blocks in it, in 'num_256mb_blocks'. + * It stores the highest 512MB-aligned address within the given + * address range, in 'mc_ram_addr', and returns the number of 256 MB + * blocks in 'num_256mb_blocks'. */ -static int calculate_mc_private_ram_params(u64 mc_private_ram_start_addr, - size_t mc_ram_size, - u64 *aligned_base_addr, +static int calculate_mc_private_ram_params(size_t mc_ram_size, u8 *num_256mb_blocks) { - u64 addr; + u64 mc_ram_end_addr; u16 num_blocks; if (mc_ram_size % MC_RAM_SIZE_ALIGNMENT != 0) { @@ -180,18 +179,39 @@ static int calculate_mc_private_ram_params(u64 mc_private_ram_start_addr, mc_ram_size); return -EINVAL; } + *num_256mb_blocks = num_blocks; - addr = (mc_private_ram_start_addr + mc_ram_size - 1) & + /* + * The MC private DRAM block will be carved at the end of DRAM + */ + if (gd->bd->bi_dram[1].start) { + mc_ram_end_addr = + gd->bd->bi_dram[1].start + gd->bd->bi_dram[1].size; + } else { + mc_ram_end_addr = + gd->bd->bi_dram[0].start + gd->bd->bi_dram[0].size; + } + + mc_ram_addr = (mc_ram_end_addr - mc_ram_size) & MC_RAM_BASE_ADDR_ALIGNMENT_MASK; - if (addr < mc_private_ram_start_addr) { - printf("fsl-mc: ERROR: bad start address %#llx\n", - mc_private_ram_start_addr); + if (mc_ram_addr > mc_ram_end_addr) { + printf("fsl-mc: ERROR: bad end address %#llx\n", + mc_ram_end_addr); return -EFAULT; } - *aligned_base_addr = addr; - *num_256mb_blocks = num_blocks; + /* + * Total DRAM available for general purpose will get + * reduced by the size of private DRAM allocated to MC. + */ + if (gd->bd->bi_dram[1].start) { + gd->bd->bi_dram[1].size = + mc_ram_addr - gd->bd->bi_dram[1].start; + } else { + gd->bd->bi_dram[0].size = + mc_ram_addr - gd->bd->bi_dram[0].start; + } return 0; } @@ -225,7 +245,7 @@ static int mc_fixup_dpc(u64 dpc_addr) return 0; } -static int load_mc_dpc(u64 mc_ram_addr, size_t mc_ram_size, u64 mc_dpc_addr) +static int load_mc_dpc(size_t mc_ram_size, u64 mc_dpc_addr) { u64 mc_dpc_offset; #ifndef CONFIG_SYS_LS_MC_DPC_IN_DDR @@ -282,7 +302,7 @@ static int load_mc_dpc(u64 mc_ram_addr, size_t mc_ram_size, u64 mc_dpc_addr) return 0; } -static int load_mc_dpl(u64 mc_ram_addr, size_t mc_ram_size, u64 mc_dpl_addr) +static int load_mc_dpl(size_t mc_ram_size, u64 mc_dpl_addr) { u64 mc_dpl_offset; #ifndef CONFIG_SYS_LS_MC_DPL_IN_DDR @@ -365,7 +385,6 @@ __weak bool soc_has_aiop(void) static int load_mc_aiop_img(u64 aiop_fw_addr) { - u64 mc_ram_addr = mc_get_dram_addr(); #ifndef CONFIG_SYS_LS_MC_DPC_IN_DDR void *aiop_img; #endif @@ -443,7 +462,6 @@ int mc_init(u64 mc_fw_addr, u64 mc_dpc_addr) int error = 0; int portal_id = 0; struct mc_ccsr_registers __iomem *mc_ccsr_regs = MC_CCSR_BASE_ADDR; - u64 mc_ram_addr = mc_get_dram_addr(); u32 reg_gsr; u32 reg_mcfbalr; #ifndef CONFIG_SYS_LS_MC_FW_IN_DDR @@ -451,14 +469,11 @@ int mc_init(u64 mc_fw_addr, u64 mc_dpc_addr) size_t raw_image_size = 0; #endif struct mc_version mc_ver_info; - u64 mc_ram_aligned_base_addr; u8 mc_ram_num_256mb_blocks; size_t mc_ram_size = mc_get_dram_block_size(); - error = calculate_mc_private_ram_params(mc_ram_addr, - mc_ram_size, - &mc_ram_aligned_base_addr, + error = calculate_mc_private_ram_params(mc_ram_size, &mc_ram_num_256mb_blocks); if (error != 0) goto out; @@ -493,7 +508,7 @@ int mc_init(u64 mc_fw_addr, u64 mc_dpc_addr) #endif dump_ram_words("firmware", (void *)mc_ram_addr); - error = load_mc_dpc(mc_ram_addr, mc_ram_size, mc_dpc_addr); + error = load_mc_dpc(mc_ram_size, mc_dpc_addr); if (error != 0) goto out; @@ -503,11 +518,11 @@ int mc_init(u64 mc_fw_addr, u64 mc_dpc_addr) /* * Tell MC what is the address range of the DRAM block assigned to it: */ - reg_mcfbalr = (u32)mc_ram_aligned_base_addr | + reg_mcfbalr = (u32)mc_ram_addr | (mc_ram_num_256mb_blocks - 1); out_le32(&mc_ccsr_regs->reg_mcfbalr, reg_mcfbalr); out_le32(&mc_ccsr_regs->reg_mcfbahr, - (u32)(mc_ram_aligned_base_addr >> 32)); + (u32)(mc_ram_addr >> 32)); out_le32(&mc_ccsr_regs->reg_mcfapr, FSL_BYPASS_AMQ); /* @@ -570,13 +585,12 @@ int mc_apply_dpl(u64 mc_dpl_addr) struct mc_ccsr_registers __iomem *mc_ccsr_regs = MC_CCSR_BASE_ADDR; int error = 0; u32 reg_gsr; - u64 mc_ram_addr = mc_get_dram_addr(); size_t mc_ram_size = mc_get_dram_block_size(); if (!mc_dpl_addr) return -1; - error = load_mc_dpl(mc_ram_addr, mc_ram_size, mc_dpl_addr); + error = load_mc_dpl(mc_ram_size, mc_dpl_addr); if (error != 0) return error; @@ -611,28 +625,6 @@ int get_dpl_apply_status(void) } /** - * Return the MC address of private DRAM block. - */ -u64 mc_get_dram_addr(void) -{ - u64 mc_ram_addr; - - /* - * The MC private DRAM block was already carved at the end of DRAM - * by board_init_f() using CONFIG_SYS_MEM_TOP_HIDE: - */ - if (gd->bd->bi_dram[1].start) { - mc_ram_addr = - gd->bd->bi_dram[1].start + gd->bd->bi_dram[1].size; - } else { - mc_ram_addr = - gd->bd->bi_dram[0].start + gd->bd->bi_dram[0].size; - } - - return mc_ram_addr; -} - -/** * Return the actual size of the MC private DRAM block. */ unsigned long mc_get_dram_block_size(void)