From patchwork Tue Jan 17 10:31:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Z.Q. Hou" X-Patchwork-Id: 716122 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 3v2mvL2d5Mz9sR9 for ; Tue, 17 Jan 2017 21:44:45 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id B4F04A75FD; Tue, 17 Jan 2017 11:44:41 +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 4302R1YAjGbh; Tue, 17 Jan 2017 11:44:41 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 31E20A75E6; Tue, 17 Jan 2017 11:44:41 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 19969A75E9 for ; Tue, 17 Jan 2017 11:44:36 +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 UqxfPtFUYoeg for ; Tue, 17 Jan 2017 11:44:35 +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-sn1nam01on0082.outbound.protection.outlook.com [104.47.32.82]) by theia.denx.de (Postfix) with ESMTPS id 69459A75E6 for ; Tue, 17 Jan 2017 11:44:31 +0100 (CET) Received: from DM5PR03CA0008.namprd03.prod.outlook.com (10.175.104.18) by CY4PR03MB2469.namprd03.prod.outlook.com (10.168.163.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12; Tue, 17 Jan 2017 10:44:29 +0000 Received: from BN1AFFO11FD045.protection.gbl (2a01:111:f400:7c10::132) by DM5PR03CA0008.outlook.office365.com (2603:10b6:3:118::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12 via Frontend Transport; Tue, 17 Jan 2017 10:44:29 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) 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.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1AFFO11FD045.mail.protection.outlook.com (10.58.53.60) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.803.8 via Frontend Transport; Tue, 17 Jan 2017 10:44:29 +0000 Received: from titan.ap.freescale.net ([10.192.208.233]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v0HAiMSv029449; Tue, 17 Jan 2017 03:44:26 -0700 From: Zhiqiang Hou To: , , , Date: Tue, 17 Jan 2017 18:31:16 +0800 Message-ID: <1484649076-27398-2-git-send-email-Zhiqiang.Hou@nxp.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1484649076-27398-1-git-send-email-Zhiqiang.Hou@nxp.com> References: <1484649076-27398-1-git-send-email-Zhiqiang.Hou@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131291234698926034; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(336005)(39410400002)(39450400003)(39840400002)(39380400002)(39400400002)(39860400002)(39850400002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(2906002)(4326007)(356003)(189998001)(92566002)(106466001)(54906002)(2201001)(8656002)(86362001)(38730400001)(305945005)(77096006)(47776003)(5001770100001)(36756003)(50226002)(50986999)(5003940100001)(105606002)(76176999)(626004)(8936002)(68736007)(8676002)(97736004)(81156014)(104016004)(2950100002)(5660300001)(6666003)(85426001)(6636002)(48376002)(50466002)(81166006)(30001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR03MB2469; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD045; 1:6FHR1uOxiiRET6kLSPbVUcjisfxIY1ZD0V4eBHdhGsP6JqxMeBV/gU3sqm63kxFhbUEqKzTO8y/sOHKeFljImbwNsp/oVBFbEJN+oyX30QMHfBZ+631q7gDfaAdQRjpZ4Cq6zW+Cy7pXXXAaZrmZVUYIp7Nj5AG86k4JsNgDZhpKUTlBx67J4dWIcByud6FZFdzvpoBU0xY+zlTtoPIOXXIAPKrN61WZpG695bG4gBKo6rhwgNlMiI5ThU4lizbQ+Sr2oHW/wqMSxiJCSnZzf29Jzvw/hsn/rw5UhrI6DGphVSUhMqzFNpWS/azDowZrU9/pmPOB/lWPgZesCiZrPPc8bhsrk/r7j9Z2Pv4HAJX9OGizNl07KJKbt9PHMntgmiT/MSCA12eMXq4HpQB0ABAjrHkMJ5Gg0ujLvQP0e7Z3XFrQyklDam3FHvGrTeM0R6HcjS/pB91AulDi/D67CzoAmi9SoCObEDEtzZZTpgNHsK0Fx/0Lm3aSdYR6XUqPDD/wzZcNGn99rlbNofp0Je7Gi2macK+LVI0DPSCZuJHvIrLeVJ+2LEIJt1+ThqFUcbTfDeRl9pZhQay/MmzG5hNGA9CU2IHinNS+WOjHMpKL1fKghI8yNjqTo11mPZ8g+X2wrd35GJbKEvZFidD4I+VsVTqtlYdU3yucxO+4GPKUuIHcQwc4V6FnMoCBcxXw+mpbotlJRZEhVSfORe3W5w== MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: caf2bdc0-809f-48b8-17d2-08d43ec5d0d1 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:CY4PR03MB2469; X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2469; 3:rM7MlOaIjORI8R7IiD/PffEGvS7W7CVUQp8gIaWiYc7HANS4MPD/OtHsITxkbP7F7pktsUuQ3rMfOygVZR4kP81r+40036snR2wDYQMHVHyuevjnmVIBiOptV/3Bb3muD5bBUuVFLqo/Wym6Sa1Alu5DqpXYPiWQrpRiMV+ZcOXTHhwV0pmokSveqcL4Tr+mBNlOtTTgppS0r3qExbylGaM7aIdZ88XVVUwt1hrwF0aQcvkleuPpl7nr3hsgx/cjf1PUgcEPU/mW0Vmd2bLmk746dIUDluV5HXxnGerV+t+cBkacHKyeAhUg9sJKABzpH+uhgMHnEbkYyibO0tTy8WBhLI/b4B+n6z9FIQ1uDMc9nhsR5et9SXxN0hndFKqd X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2469; 25:4unTE2kDETLBeJ0h476MSW3Nl9xKTCBkT+jEXj95g+0uFycU/sdvevRmEiK0f4dpNraW5Pq6Nip5atOAoI/eKczqZgH7RV5GsfQg9lCYe+Ce7K4iL7g610d5SduGMD3LnIGT77nC+RFrREZN4cm2pd87jGSg/4jVRNDt7N42gJf2IKtP6MdvDOyck9PY3VbxEDX8z2Ge+DGu0pSdwzJHHgsmdB+VHKmalIVy7qzk7SKbhJJc92HqvCN+62/7YyDEKTexy7+ZBPOT904pp3i0um+s0L++UZKpBnKNYa5Zyo3LBD8yB4wtjMib57iWscc22fGg4SowuLo2tn+c8FDGr3hq6sUpYTg0G6ZVZK8jOiIJ2v4l4aiLdmh4JXdM5bnfbPaY+JlnxqqyxXwk/Xon0Yws04pvUZbEX2zZgPx1N6lvkqPvNl4oNTGXQq79NK2lwt9Kijaeo9zBaxdJ71evNvxkqisikP94lbspLKbKXK6VWrtDYcMCuQCvVu16TUyG8ktGBiJM2IxDazGdcOjRGoak2+/sMlAEud66ABFgkfWvTvUQWFmoofY8NR6KbONPhv0Ggb+vxiquQgtJitB05DNQO1CpTBa/Zjj5Ot6Fh02kGN5mvd6KHtOa/IGbNqrfXGt68bNrmleuztoFm1BicaZ2JOfJs1oBDRa32bNorhLNyNiuEUm9UBvADDtNDatw3i9RyVVfAKnzq3pyRp27seyXQQo27dH8uAyA+1bc4u5EMByMRLR6PyzAz3PSuQ3prr4k97e9DSDNlajGRznjdA== X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2469; 31:LWhVZ3FlEkCdFJRRyika+Lpb3L1aAQ3urXiWGbJW87bL60DG07oqitJIAeM0lmkk2tzn+jzI5JgtxlhINqqIYTJAT9FTba2f11hMokG872W/UbMjOEvGJQDfHfIS9d5DQAQxmYeeERLqb8KUE1QxVej7cgEy25mhZZWqEHEk0xmwnwi5it3pAOzlZ14BB1vs41Iss1Z7Mk+DKra/Yzep6b2sX8ps7tdj6HFnxBAW8Onlw7Mu266UEgtgSuWmNbzZ0x1F8wplB1y96c3KP6Sumv6hthDGiRPfU3gB8uSzqJY= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095060)(601004)(2401047)(13015025)(13017025)(13023025)(13024025)(13018025)(5005006)(8121501046)(3002001)(10201501046)(6055026)(6096035)(20161123565025)(20161123563025)(20161123556025)(20161123559025)(20161123561025); SRVR:CY4PR03MB2469; BCL:0; PCL:0; RULEID:(400006); SRVR:CY4PR03MB2469; X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2469; 4:aw0Y+rUPI1ePxavySxW6a0iNuo6V/lRADk7yLedfp+iQCkEF+zhOHEBJ7Zc7Lfp0NTGSB5IrhNlJvnl27turXmd8p1WSP+pz/vSTmSEYxSWAXI8/aWEOaZwhFbPLlLZj8+EL79s27IPRMPG8f2BUrORX3hj1W/nXC+eDvemF1WY1oUHmFT/ung1D+WPQ6u1o06t4pLT8qKerHs+RfkuurrwMyLu5/zIeSTWMbL0shUaw+sqaSPJTl7HDMnWFth3pgZ8UHDYEwUkzjciYFStbvlByWIQkNxsSsFfDr667J6X8TSF7dzcsY2nmEinGahOu5NR+D4Avp8QJpf9Nb8RxAzO4pKzINR616A9f9nDgf+xeFeOOcujanmDTgH43zHKJ69C1eUFpm3DJtA/FDKmF73aecDhlsQrn93cLfa7B0hDWMPOKq7l2pGvdjWckEUGGmw/PXXiwDwCaVu0oVsxJWPV6NsnvtAU2buXloZrCShce3VfAaSi2eVqdBZ+m/+P4ya0HGw0lEhLDU6FyZyqUNGXyWecqRTSQ1GlZ+YE7GFqszVYGs8Cg+6XhOi7sYAELUNVp96zVRgyNk7vNZCVnos/n/Q9hFX9qVUmplxXSeNPUw6ttC+2sSlJxnpzqnU4RAsnKpjkjm2PhK/UVoXb6jM7YgmirxunZrburzWi+VbJtcmNS0jRZWQLC39axL0yKounLTAdi/mXQRC8++AtFPhJQquLgly9jXMOjzJo+qdaHQrg6yPfTGx9NzFjFA54n X-Forefront-PRVS: 01901B3451 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY4PR03MB2469; 23:ZMexhLkzlkOyXAi8ev3o2XQT6fTNAiCYGwhChORn6?= =?us-ascii?Q?ujRoDVHvPe+RlI22GgVTHxPoD2tf1QOJLp8rwzswZ6y3qVtjtJf7Z1fFtuXk?= =?us-ascii?Q?MoPTxG4ypuCobRCHLBB4jkPASLFiZXNsRNEH6qYIBCDcjlPswoQQivX0iYX6?= =?us-ascii?Q?CraHgFwPtsyzbN/3Pm7M7RcekelVRDpGyhqaoojqDkhH3FoNl5F4TV2hYpQr?= =?us-ascii?Q?pxRBZxHRsu2m3ydg77gxxRZKHt4EoaMq9xxZPHlMYlj2SAvjF0S3tKgXixq/?= =?us-ascii?Q?YLgh8cOdcwNrpxssrE4dPeeIMpCQ6Z7KcQ76sIPjh4+7ksvl9+3P/zynYR3w?= =?us-ascii?Q?U7RH/bgKQBr3As7z+h9SZCQhh3QRaEjdhavm7FXEBsMZbY8KlArN2GZM8+eH?= =?us-ascii?Q?GVDz6X4WJK6ZTvZrDcCXbbalniEvFQCfTpPLaA1K1D83rDJa/TDVHa7T5Kme?= =?us-ascii?Q?+9IA/pP8w8UUDeGr49q0IqRzT5XL8ZA4gCHj/jT4pYHiXfRxxFGeHAwBZaS/?= =?us-ascii?Q?XJblZsJt03wPyWmuVhUhDxcYtsSgJQqAG2rPozkr/Ye7t2whVVIAOfdrhXNg?= =?us-ascii?Q?Te8qEffQhmw3qnZwHhwmcMb6/ugpocakieRzE+2nXpEfc/dbPhcGLXWW4kOd?= =?us-ascii?Q?2t4pO27Kk5cEKOSwc5OA/ko7bZQ9pHNdTsi1duSvSwdsDESPmUblkM7qdjgw?= =?us-ascii?Q?dsgvdL7fUDEGpEZOKCXEM4WcIv8FdsohyqofW1rxBLACkMfu8h4acgOE8WOA?= =?us-ascii?Q?nK60qoR61piCn7HTbBWtqO+MOZrBftRLbjwspN/lQ3WVRYjuVFi7ftIvQWEO?= =?us-ascii?Q?Jmyg402gmUNfAnKzv3NhPYv0ZJ7hvqimr1DvGtoyRSkQzX125BAuHoE5ToNP?= =?us-ascii?Q?Ow4hT+M/B41jmLt19VGgjaPQJ06xYWk+asKNOcP6px7ETTn5CN6dCtASdtlC?= =?us-ascii?Q?WdDGe6Se9+gSOi/uPcY6VF9NcaP2ElHitjKmz3vG3XIoSFm7xj+q3xPkXCmP?= =?us-ascii?Q?E0qYLlwc0NZNB/ylAMwEhOysy7oAJodqtvcpmJUR+Jf+ex0GaGZIQynmjuss?= =?us-ascii?Q?0E65n5hVqHZNU1GDmObR9E6OoMEx3NazhmG/XkbL6JpG9SQ+Jjsda+pnJvDz?= =?us-ascii?Q?xnBvlPfa5l+4LL8PkkzCdY7fuU9oVgUdfShDyTjL+jAlJMhd2YzNRsuFEjrY?= =?us-ascii?Q?8T0InUwfIjTe5V3QWc/apjPg0pZKzC9JnSH455WXk+GvHTucdB44gagmTe5l?= =?us-ascii?Q?/XkM7aMwlG5EkpZ7ou9dwUE62OJXLQpxuZf4SVU52cGioDpQHxX50B7IajK/?= =?us-ascii?B?QT09?= X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2469; 6:bOXmJfXbKNU7Weglvq6ci1YXNHYzZMuViD4Ni5HNRjnfkG3KjB4IN9VY9BYaaVtQ7Vbc/i10rktjZVoUc7r/UOBWByaXj/O56SlrvkIao8IpwaUWYwrQDR9wzmy4lnM/m+f1uTlJwTzpoZnEo9iic3Q/EWi7P2S3D0/VFQJjwMTtkZR9vV8FCPWLWLxvTkDNdIdOaDxSFVV5c+01ExiMngI9buS7zbAZE1UpUJaGVXh1hjrQ56/ShP4jr5WXe1lp5KSRUUCmV+Mbr7sKR9MWLyygBwi+q91Ixyb+ZC6AyUrvovF2SO7s/XHAM7F8lv+NDU1Oojrkc3n32f29EQj+OKPZo/BiHPOVAbCw5S2cykMugPJNQnqNC45BE63ENqigcskRhk80E+osny9mOFi/JO76BhmOXCNyptATWkIglqXrk/nMg3UG5i9ksTI2tsvb; 5:893faECzI7HOn8TAmT1Kluy6AlyxpYfVnWvSWfOdZUfJA7zZ1DUx0Kj6s0MxTFnmo+DV9Zp6Fo+2Kz3jUJIS+pd4D34CFlLZWAvnqZt2z0S2TJ9GmvbRAN4zxlKdaN39ck/vRra4OuFKOCxjEWLTL94c3kHndlUQDm5iJbwyqVNhjjyXOq+uxKK8/iVbkahE; 24:WRExO/8N5O/6kw2Af67LD7XIoAFh0Vi4588BaI8LiCcrppsE/jIyv6Eg+1BM8GPJ2nGcwx8ZlcbT74TUWCfyq497AgxS+ZbW0PHvjX+v3jQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2469; 7:i+x3q/H/+GTcSjO1bY8sd/OEDGT1x0cLb/O2F74i0W7o6q6GIq49aN8GMGwCFCCVywfGu2xEQlXMaldhSEp3524nUnDQvfT4NdnQXrIT3/1Wb9LCim35fZhAeAY65s7YgfOgHnO+z5JXWK6Kl7eDWx8ZEH4HydJa7F1Z4PZHZ9sc4MVoftKZNM8QcIEYfw0DDFxwDb321QsMMVeuQZcGhhpzi5cx3g4qPt1L/EZ+gM0GoK+SKnxDaFl9StMI07XGF3vYG1SlZ/lgwlq1Rg1p1z/oEIpWDSGuu2Frr8KhIdOC6KeJtD2yFUQhaOXa6fv2gTvdVxHqsQDexL1p3tAyM91eUzyunOLe82eyNyGf1HsnFUZrfY8qE8nFi9PP5DMTwaFBI3+v9wvc4d1eis3uS0camXJ/XlQy8ODCk4xVgxZNU+n+hEXjFIcbQxZFdzo6a5WB92g2k2xToqn7ADG90A== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2017 10:44:29.7054 (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.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR03MB2469 Cc: Wenbin Song , Hou Zhiqiang Subject: [U-Boot] [PATCHv8 2/2] armv8/fsl-layerscape: fdt: fixup LS1043A rev1 MSI node 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: Wenbin Song The default MSI node in kernel tree is for LS1043A rev1.0 silicon, if rev1.1 silicon used, need to fixup the MSI node to match it. Signed-off-by: Wenbin Song Signed-off-by: Mingkai Hu Signed-off-by: Hou Zhiqiang --- V8: - no change arch/arm/cpu/armv8/fsl-layerscape/Kconfig | 3 + arch/arm/cpu/armv8/fsl-layerscape/fdt.c | 154 ++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+) diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig index cb24ce7..0941bf8 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig @@ -172,4 +172,7 @@ config HAS_FEATURE_GIC64K_ALIGN bool default y if ARCH_LS1043A +config HAS_FEATURE_ENHANCED_MSI + bool + default y if ARCH_LS1043A endmenu diff --git a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c index f289172..dae9605 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c @@ -194,6 +194,157 @@ static void fdt_fixup_gic(void *blob) } #endif +#ifdef CONFIG_HAS_FEATURE_ENHANCED_MSI +static int _fdt_fixup_msi_node(void *blob, const char *name, + int irq_0, int irq_1, int rev) +{ + int err, offset, len; + u32 tmp[4][3]; + void *p; + + offset = fdt_path_offset(blob, name); + if (offset < 0) { + printf("WARNING: fdt_path_offset can't find path %s: %s\n", + name, fdt_strerror(offset)); + return 0; + } + + /*fixup the property of interrupts*/ + + tmp[0][0] = cpu_to_fdt32(0x0); + tmp[0][1] = cpu_to_fdt32(irq_0); + tmp[0][2] = cpu_to_fdt32(0x4); + + if (rev > REV1_0) { + tmp[1][0] = cpu_to_fdt32(0x0); + tmp[1][1] = cpu_to_fdt32(irq_1); + tmp[1][2] = cpu_to_fdt32(0x4); + tmp[2][0] = cpu_to_fdt32(0x0); + tmp[2][1] = cpu_to_fdt32(irq_1 + 1); + tmp[2][2] = cpu_to_fdt32(0x4); + tmp[3][0] = cpu_to_fdt32(0x0); + tmp[3][1] = cpu_to_fdt32(irq_1 + 2); + tmp[3][2] = cpu_to_fdt32(0x4); + len = sizeof(tmp); + } else { + len = sizeof(tmp[0]); + } + + err = fdt_setprop(blob, offset, "interrupts", tmp, len); + if (err < 0) { + printf("WARNING: fdt_setprop can't set %s from node %s: %s\n", + "interrupts", name, fdt_strerror(err)); + return 0; + } + + /*fixup the property of reg*/ + p = (char *)fdt_getprop(blob, offset, "reg", &len); + if (!p) { + printf("WARNING: fdt_getprop can't get %s from node %s\n", + "reg", name); + return 0; + } + + memcpy((char *)tmp, p, len); + + if (rev > REV1_0) + *((u32 *)tmp + 3) = cpu_to_fdt32(0x1000); + else + *((u32 *)tmp + 3) = cpu_to_fdt32(0x8); + + err = fdt_setprop(blob, offset, "reg", tmp, len); + if (err < 0) { + printf("WARNING: fdt_setprop can't set %s from node %s: %s\n", + "reg", name, fdt_strerror(err)); + return 0; + } + + /*fixup the property of compatible*/ + if (rev > REV1_0) + err = fdt_setprop_string(blob, offset, "compatible", + "fsl,ls1043a-v1.1-msi"); + else + err = fdt_setprop_string(blob, offset, "compatible", + "fsl,ls1043a-msi"); + if (err < 0) { + printf("WARNING: fdt_setprop can't set %s from node %s: %s\n", + "compatible", name, fdt_strerror(err)); + return 0; + } + + return 1; +} + +static int _fdt_fixup_pci_msi(void *blob, const char *name, int rev) +{ + int offset, len, err; + void *p; + int val; + u32 tmp[4][8]; + + offset = fdt_path_offset(blob, name); + if (offset < 0) { + printf("WARNING: fdt_path_offset can't find path %s: %s\n", + name, fdt_strerror(offset)); + return 0; + } + + p = (char *)fdt_getprop(blob, offset, "interrupt-map", &len); + if (!p || len != sizeof(tmp)) { + printf("WARNING: fdt_getprop can't get %s from node %s\n", + "interrupt-map", name); + return 0; + } + + memcpy((char *)tmp, p, len); + + val = fdt32_to_cpu(tmp[0][6]); + if (rev > REV1_0) { + tmp[1][6] = cpu_to_fdt32(val + 1); + tmp[2][6] = cpu_to_fdt32(val + 2); + tmp[3][6] = cpu_to_fdt32(val + 3); + } else { + tmp[1][6] = cpu_to_fdt32(val); + tmp[2][6] = cpu_to_fdt32(val); + tmp[3][6] = cpu_to_fdt32(val); + } + + err = fdt_setprop(blob, offset, "interrupt-map", tmp, sizeof(tmp)); + if (err < 0) { + printf("WARNING: fdt_setprop can't set %s from node %s: %s.\n", + "interrupt-map", name, fdt_strerror(err)); + return 0; + } + return 1; +} + +/* Fixup msi node for ls1043a rev1.1*/ + +static void fdt_fixup_msi(void *blob) +{ + struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); + unsigned int rev; + + rev = gur_in32(&gur->svr); + + if (SVR_SOC_VER(rev) != SVR_LS1043A) + return; + + rev = SVR_REV(rev); + + _fdt_fixup_msi_node(blob, "/soc/msi-controller1@1571000", + 116, 111, rev); + _fdt_fixup_msi_node(blob, "/soc/msi-controller2@1572000", + 126, 121, rev); + _fdt_fixup_msi_node(blob, "/soc/msi-controller3@1573000", + 160, 155, rev); + + _fdt_fixup_pci_msi(blob, "/soc/pcie@3400000", rev); + _fdt_fixup_pci_msi(blob, "/soc/pcie@3500000", rev); + _fdt_fixup_pci_msi(blob, "/soc/pcie@3600000", rev); +} +#endif + void ft_cpu_setup(void *blob, bd_t *bd) { #ifdef CONFIG_FSL_LSCH2 @@ -241,4 +392,7 @@ void ft_cpu_setup(void *blob, bd_t *bd) #ifdef CONFIG_HAS_FEATURE_GIC64K_ALIGN fdt_fixup_gic(blob); #endif +#ifdef CONFIG_HAS_FEATURE_ENHANCED_MSI + fdt_fixup_msi(blob); +#endif }