From patchwork Tue Jan 17 10:31:15 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: 716123 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 3v2mvV3CWdz9sR9 for ; Tue, 17 Jan 2017 21:44:54 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 878DCB3893; Tue, 17 Jan 2017 11:44:49 +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 gJhHQbgnUmfG; Tue, 17 Jan 2017 11:44:49 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 0FA9AA75EE; Tue, 17 Jan 2017 11:44:44 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 4E7CEA75E6 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 GGkTo9oybE_t for ; Tue, 17 Jan 2017 11:44:36 +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-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0069.outbound.protection.outlook.com [104.47.33.69]) by theia.denx.de (Postfix) with ESMTPS id 66E2CA75D5 for ; Tue, 17 Jan 2017 11:44:31 +0100 (CET) Received: from BY2PR03CA047.namprd03.prod.outlook.com (10.141.249.20) by DM2PR0301MB0751.namprd03.prod.outlook.com (10.160.97.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:28 +0000 Received: from BL2FFO11FD052.protection.gbl (2a01:111:f400:7c09::123) by BY2PR03CA047.outlook.office365.com (2a01:111:e400:2c5d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.860.13 via Frontend Transport; Tue, 17 Jan 2017 10:44:27 +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 BL2FFO11FD052.mail.protection.outlook.com (10.173.161.214) 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:26 +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 v0HAiMSu029449; Tue, 17 Jan 2017 03:44:24 -0700 From: Zhiqiang Hou To: , , , Date: Tue, 17 Jan 2017 18:31:15 +0800 Message-ID: <1484649076-27398-1-git-send-email-Zhiqiang.Hou@nxp.com> X-Mailer: git-send-email 2.1.0.27.g96db324 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131291234669809096; (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)(336005)(7916002)(39850400002)(39400400002)(39840400002)(39380400002)(39450400003)(39410400002)(39860400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(97736004)(2906002)(38730400001)(8936002)(4326007)(77096006)(50226002)(36756003)(5001770100001)(626004)(305945005)(86362001)(2201001)(575784001)(8676002)(85426001)(81156014)(54906002)(8656002)(189998001)(356003)(81166006)(104016004)(6636002)(50466002)(6666003)(68736007)(5660300001)(50986999)(106466001)(105606002)(92566002)(5003940100001)(48376002)(47776003)(30001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR0301MB0751; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD052; 1:P7Bq2IWP7UYIUuiP206ryDPvQGZzpPzZ7OEfJ8L27F3AARnRLp7z+dqnk8aB/eyP2UFak17YXMt6KjZHz47AAYR/0QoaCqcwAB1kVbyOcX+YH553NuFlocT4NAEc6gscKliX7lIQYCVPAsQgH9/XBPkQ7l2MKy1h3paBlp1ELB0g8d9HTWok9SgEsSvWaVvunYyCNd5Tc6djmjJKu45EXHdUrdRjZcaCYHZC1HQXgYQj+UP3pa98ZqO5kRZBKyW7XqVFhINkPkBNajKwfAs28HEtzN28YjkbHVDADhp902pZhEHpKJVknRMWN/YIlTDK0fulOdqnIP2l32RTRrsxvPuA6hVEVvczEGR8nwHCyEHWT+rcibZejKq9ZYy1rWDvZIMIHw3UCe8nRzDV2qxUUVEcBhr5/M9db2qk77t84Rh2ePOOmTaMPPcxTIcN6o+yS3c3Db3pewtq2kLj2yjYgWUs+2aupIecqp56U7DDVwLlc74PRT4Q7s4tEbYjj5Nwf5OD2Y2iRn7AAsg9r152c6Z/jBG4zm8q4I2d3bAg0wFFI2suCpLIx5puc0sFBgTKLTBt/I/j7MF7lvt4n6IuZsyXVLysTS/R6bxrvBLAkBXzw8DxL1XrLJaTxv6NVP9QkXymYn+mOiN4MOvViGKHGsA2Vz+htNSH8b6WfSwtbgwQ4BYmyvuTduuC9eQB98zcz6A9hMIogHms7KekcmkY0g== MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 1d7144f6-c5cd-4bb7-6c69-08d43ec5cf12 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:DM2PR0301MB0751; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0751; 3:zwWnuXv5z8K5FUh/YiSKbml0/IDaUyN/te4pMC1I6vVdgeV4/QKQApw+LeeMEWii8dqzSgRzrxGvwqWM0caWVFAbMLpxCe6MFD/+twydyez00DFX18ciWLg9l8LJ4AVNftctl1sjW/v5HZoeUYXyJYnNjXoKdOlfMRVZXjHQiXPvbLNHE7g7Wj07fxFGNSCF++4g9dtVl5MCe+5PC53utAtMFb8hcCmELhkH6LXqfMNa1UO+U1+mARFnsf5cfbWYyrfeS/bhEFkLJa45UYFqfboNr60jbUh+uubdtGtA78DG1oXYABA5orKfnlGRg3sgAYwqBcoc12WUEBAmrkohm2/9ZWe076GCAN0vwmMceD6xGZRuxotUAOe0Zq0+sqw9; 25:5JJ9JbfSuf8T0tL4Hx3aN4ZXsfEGXRtO7MVEJyVi7bRN8K99m6fAh6kcPZEuhVh9ZFZHxoydReQYIDSJHQTHNOA6WKXsftOfeJn5u5cJ5ipmmdS+RnKxyAVeo2KIkGuFDBVE9S0Ecg7MzcB6sNCgxaHogNwlzntgUA9UJ71ti4AvoY9rzPqYE41YpvbKganp1vxv5mUiM5jb37NJxhAFHtuJNP1YP2Itc/VKM7/z1PN3LB4HPbbv2OoCH3QxEZYt/9Aa6GeYUWangqu8cjtu3MQCQwsWV+IiIEgs8YrDyce1D3vR2ey+JT55SdO6TEf7YbCFz9aGCOuhMqC848v5g720X08YJ2sNktW3kKkxQc9sKpc2PSO5/+ALWZ8PTXV0NpQ7GlX5bEHfj50ali4yXHV1EAltOJAXX/c+edjAWiy99zAiR1V8UqCGDZ+JVP6qEjK9zPYQun6o3H2rcVlDYg== X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0751; 31:Z0Cs7tTlUMwLdRASeLQW+h4q4wvcTsHNgYFVZ6EINiC37nmhHmkXsjR4wSoQdkTOGA7gDr1gjf7/Nf7SnF7dkTcRQ0jh73b0d3Ejci1URVWzK2vW/0klT3pJSiGjq5xYIQdAbTwQMjTwzmcgZup71bGsQqY5R+bCa4nGsdbac4tvcY8Hq5fQW15H9kG5qmFbW+VOcc2EuTCm4IIWwwmfJTlkvFhP7HBD7vD8hXxYQiprnGdfyBOIe5zd68Y+K2ghV1kmuw/lvSEFG9PuScKdX+DS0hLwq5Hz0SONliiyt68= 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)(5005006)(8121501046)(13018025)(13015025)(13017025)(13023025)(13024025)(10201501046)(3002001)(6055026)(6096035)(20161123559025)(20161123561025)(20161123556025)(20161123563025)(20161123565025); SRVR:DM2PR0301MB0751; BCL:0; PCL:0; RULEID:(400006); SRVR:DM2PR0301MB0751; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0751; 4:XoAxVyQv2kjeScqXahE8lcz6AnmOBdWDJK+n+Cm2dtvKW+VsVvsNUbQQGQCwFIpY+PXmBlCDLuja+o0qdMAA0X8XJb76t3UHLybvcETPJc3Pq9M0xAb3rAvFuTXkhkDAOxBZf4k76jnqk3RP6CQhooZg6kU8sDh/Ki6MqKaGub4Njpuzprrad6L83xcGiyNQWCQqO44GZOjm1W5GsqsgmJrS/3ig7/bsJ1ZMAK36oE3FmWgl25dOQvWGrUtI19bk2XyDWhKrMxM9OyEEK5qRg8iyDghpQBMxyhoiI98dpfZ2Etkbtz0GKq7LfouBsg7xu0pWwyqeuY/0YiE23RIuvd562QIearGS7UFq51jeaTDrNpZNL1xFj5h+4Pkmi/1l60cDE264Ryz4pAhHbTC0r6YXFf7oqN47wPt+vk1zFgYLj0fPsrVz8roJ7Z0Q43hnU/MEHhXeEl3c7+2blCVUuQP0FRgnC5FAaEBKv1RLefTmcqutRiSOZxYIU+wiJLbWISJHAJ58Lkq/YZqQx4Uy8BVJp4HOMFUTmlKAHnjVrux4XpLmZk9ejQoXUhuYu8Krsp9eQz0pKSrBoFOn2dizfNQlulvRNl1Z2x8T6pP5CtOenjBG6rSWhiM9VjWWQEFEGjGqP/SJZ0kdxqG+sKbqddcvX8D1L0rg+bGjqSqIzU7JZQOkDxoDZLvQE1Lrn7g+ziawgiy9rlHCHBshD/cchURMfVxqCA0RIoN0UOSo9+93NGDyxnHY2GZfKdi2CIJy X-Forefront-PRVS: 01901B3451 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR0301MB0751; 23:oUdHarcDrCi2Sdxt6fIgw4B43rMbi6ZCEi02IvU?= =?us-ascii?Q?3u3RGm+UVJqaeclbNGyFX/nSyDjVFcp833ga9pSn9fQElOEQMJMrjVkGi5Am?= =?us-ascii?Q?Y7ZctmY4slGSTIXbuvRjrAn2nGKuO56dSL3+b8t+4KwbJ8/RglzitV+X//6P?= =?us-ascii?Q?Fd+T5gX2WQgRHpAslRFDwuCBkSmEhR0h23iatYqIqe1bEYJfgWSWvqM8Wibu?= =?us-ascii?Q?t6/n1NsdhPNjgKIoA2PQliGvJ3fgeo4LI5SOEfdg8NccsrSrRPzhi7fXhddc?= =?us-ascii?Q?pwigtuh5NZ01omk3ffb/I/iefU0gF3ReajAckgDhVGZFm7W6p1eTt4VLQ1pS?= =?us-ascii?Q?rG0m7qLYF6/gWgUVPMQgthEKw0YU11a4xlTnD5n+rYmTtRfsSn3Wdxj5FW6/?= =?us-ascii?Q?RAiHr+USqLd/VjiR7HnAGE08Qe+HXCRcLTy/obt5H2le9QvQUwhlyKpe84Qg?= =?us-ascii?Q?GgJJIedCosMCAGtqAHze10zQ7li5ccxvO8KN+uauIRlAWkr+pmbYrxFm11t9?= =?us-ascii?Q?XH1v13CGDPeEaNkRU4XvDSo2b5VqTPB+aobeOEjQDYFEjR5DeqLol8mBqeJf?= =?us-ascii?Q?6HbbUgPVknmpbgKRt7/7rIg8SNQsqJdtKGDRlAWBdoKwhQlGt8erSoLF4TVM?= =?us-ascii?Q?9h90w/Pz9a0jplHaIpoeYPZm8JhMEko9ikd0jyct0Mfhhym2YKFfZbnUQFBc?= =?us-ascii?Q?zwcaJNIyoPgwU2kZbGu6z2oPM5KZD7sEO7pPVd0MQj3KBZKlR3dqO6TGoWPu?= =?us-ascii?Q?jB95XEh7W+5GoQf+EvzV0RoUIXEQ8Ls66/eogUgUbrvlnkjmeiL9M7HyIjcV?= =?us-ascii?Q?rUu1woJ6dNho/Jq9jSQvrHD+VXRBaP8EYi5JAc8mnxpkn9lBlctDvf4razeF?= =?us-ascii?Q?bZxHDpF2JET+8YwWA5gwORR0zvoPaLEcMcgNplFXeAf+3SB8d+riRZZIaJN9?= =?us-ascii?Q?5qklvb+fzEBUtQAATrjG8Tm2bnH8HO+74UOFXK2adyos8sldaXJ2SIJneZ6U?= =?us-ascii?Q?jCzfEue3HmBIJJ+w4mhts/P1ApYU5H/HEFl0pTKV4ndSoCywwOfRmtffeOWA?= =?us-ascii?Q?XwLYFwRv3E7N9WtVZpwFHNAgnpmdIJzFvJuZpmtokpFkDmjVKR5Ll6uadRMc?= =?us-ascii?Q?pKzCBOiT2gMs1D+0WKB9/Ffvl+zJ+i7njYrAlI574QxOq/83YVLLmNmCapNH?= =?us-ascii?Q?e9sEewZK+OlYlLYArR0yKQ/52v+zLm+Cc6pAl7fQEtsAh5Jo3pNQkFp+Kluu?= =?us-ascii?Q?4ZfRhibQnGJEwDnpMJLbnVQug9c0qErD3UNGzeOWN?= X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0751; 6:1iEpw3iyVFgd/pXXpd/hDNjai8ub1mRR8RaLojrpc6vcSeNoJSCK4a7/HTqZgJjDJUR/FjHfl9imAUyk6TXUFdzZ8iDhlOGu+VyYTeDMqjtFXiVzcaIQFKdKe+am6EqWQghgQu89YpFuG2HwKxav9x6F8daQgvlj8stEbykG0ODtBhuCk6i7uzLRdgTjn0Ok3LVOGu2jidoUjE/TEllRKKozjtyFLL65s/NT+8kaWNYXMD/t25IGjKaFDFyTd9FrUCGljr8jFBVq3wm5LEeTKOhceyZzohYxRcjU7A9HnvTc0htWIMFYMyN1/kPaZRz06BvIljUPfMVE8fTtegqqZWYTnSZ80RhlgYD3DskxXx2FzlQuhDwkzrjDhDt7GliJFSBwOKZz3VIKrE614xX7FhqiNFejLk34+lfq6P/iDEH2BG/ZKSQnddvTLVgvi9nO; 5:xzW68+oSYr+vUyYSx4uYtBs4c1PkjMwuoCjwW3jkDnhXPG/UoiCfIwX7gM1v1bZGC4fLKVtxOONkzMwJ49+GMZLD29RILEwLzpz/d1YyU2T8CY1tYn1Adar70oMh6lkxHrGDeV2aPEIdPWsKu/fdGDQl3GryEmpgtK/T9mv+wguKIaHcTyKCIabtNOCXOp9k; 24:BH+SvkvTLC5re7Mm1PW3M4iUDuY453pax/HVSynABsdzzAaTt7p/+Ehb21Z6mnQQ1yTzNkxF2W/v+8LkZki+2nLw2Z/GcU/O38CF5Hn/9Rs= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0751; 7:AtA1VwwiBqSc/j1GymaNtqXeWFmccYuTQ11E9y/GTMbpfDQ/uVIauKCYVrY+WAhaWhH2i3Jpx6/HjYk3g4bZlAF29uMO9CLmg65MxJ4wokBWYYkkGsw8FurfVjkQV+ZAyDc2kV+IpmySajCHmqsNC2qS4aFUsaV5ae/9SSgilwUzi1qdng6z+haqZNECiHWAethKrmflIq6gHBfdaeJrFDDc0sgpnmPjPZ6qsfv1XkinFe8xrt6MefKf+5B8ySo86tzWSnti1GlH5c7L3umfIYF3/15F6zWbZeGthDdEXBxUNFKIVRNwOoecKGQBC3CXvI3aFClX9JmoJJ+KwfESRbGGVSz3lDpRqXeEi4QdtyyWOnuDQXUn7kl7SwfScWbXGnOqKiLHdTWTslPTvi6B/CMOFReYHlF9uI9eAqGlZPG8uI6AAONPk57FnQhqt3cldMHNPhhBnrBiuMLvpNmqBg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2017 10:44:26.7937 (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: DM2PR0301MB0751 Cc: Wenbin Song , Hou Zhiqiang Subject: [U-Boot] [PATCHv8 1/2] armv8/ls1043a: fixup GIC offset for ls1043a rev1 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 LS1043A rev1.1 silicon supports two types of GIC offset: 4K alignment and 64K alignment. The bit SCFG_GIC400_ALIGN[GIC_ADDR_BIT] is used to choose which offset will be used. The LS1043A rev1.0 silicon only supports the CIG offset with 4K alignment. If GIC_ADDR_BIT bit is set, 4K alignment is used, or else 64K alignment is used. 64K alignment is the default setting. Overriding the weak smp_kick_all_cpus, the new impletment is able to detect GIC offset. The default GIC offset in kernel device tree is using 4K alignment, it need to be fixed if 64K alignment is detected. Signed-off-by: Wenbin Song Signed-off-by: Mingkai Hu Signed-off-by: Hou Zhiqiang --- V8: - Fixed a compile error for ls2080. - Removed the duplicated definition of ls1043a SVR. arch/arm/cpu/armv8/fsl-layerscape/Kconfig | 4 ++ arch/arm/cpu/armv8/fsl-layerscape/fdt.c | 64 ++++++++++++++++++++++ arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S | 61 +++++++++++++++++++-- arch/arm/include/asm/arch-fsl-layerscape/config.h | 22 ++++++++ .../include/asm/arch-fsl-layerscape/immap_lsch2.h | 3 +- arch/arm/include/asm/arch-fsl-layerscape/soc.h | 1 + 6 files changed, 149 insertions(+), 6 deletions(-) diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig index cc0dc88..cb24ce7 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig @@ -168,4 +168,8 @@ config SYS_FSL_DDR4 help Enable Freescale DDR4 controller. +config HAS_FEATURE_GIC64K_ALIGN + 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 c10ccf9..f289172 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c @@ -133,6 +133,67 @@ void fsl_fdt_disable_usb(void *blob) } } +#ifdef CONFIG_HAS_FEATURE_GIC64K_ALIGN +static void fdt_fixup_gic(void *blob) +{ + int offset, err; + u64 reg[8]; + struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); + unsigned int val; + struct ccsr_scfg __iomem *scfg = (void *)CONFIG_SYS_FSL_SCFG_ADDR; + int align_64k = 0; + + val = gur_in32(&gur->svr); + + if (SVR_SOC_VER(val) != SVR_LS1043A) { + align_64k = 1; + } else if (SVR_REV(val) != REV1_0) { + val = scfg_in32(&scfg->gic_align) & (0x01 << GIC_ADDR_BIT); + if (!val) + align_64k = 1; + } + + offset = fdt_subnode_offset(blob, 0, "interrupt-controller@1400000"); + if (offset < 0) { + printf("WARNING: fdt_subnode_offset can't find node %s: %s\n", + "interrupt-controller@1400000", fdt_strerror(offset)); + return; + } + + /* Fixup gic node align with 64K */ + if (align_64k) { + reg[0] = cpu_to_fdt64(GICD_BASE_64K); + reg[1] = cpu_to_fdt64(GICD_SIZE_64K); + reg[2] = cpu_to_fdt64(GICC_BASE_64K); + reg[3] = cpu_to_fdt64(GICC_SIZE_64K); + reg[4] = cpu_to_fdt64(GICH_BASE_64K); + reg[5] = cpu_to_fdt64(GICH_SIZE_64K); + reg[6] = cpu_to_fdt64(GICV_BASE_64K); + reg[7] = cpu_to_fdt64(GICV_SIZE_64K); + } else { + /* Fixup gic node align with default */ + reg[0] = cpu_to_fdt64(GICD_BASE); + reg[1] = cpu_to_fdt64(GICD_SIZE); + reg[2] = cpu_to_fdt64(GICC_BASE); + reg[3] = cpu_to_fdt64(GICC_SIZE); + reg[4] = cpu_to_fdt64(GICH_BASE); + reg[5] = cpu_to_fdt64(GICH_SIZE); + reg[6] = cpu_to_fdt64(GICV_BASE); + reg[7] = cpu_to_fdt64(GICV_SIZE); + } + + err = fdt_setprop(blob, offset, "reg", reg, sizeof(reg)); + if (err < 0) { + printf("WARNING: fdt_setprop can't set %s from node %s: %s\n", + "reg", "interrupt-controller@1400000", + fdt_strerror(err)); + return; + } + + return; +} +#endif + void ft_cpu_setup(void *blob, bd_t *bd) { #ifdef CONFIG_FSL_LSCH2 @@ -177,4 +238,7 @@ void ft_cpu_setup(void *blob, bd_t *bd) #endif fsl_fdt_disable_usb(blob); +#ifdef CONFIG_HAS_FEATURE_GIC64K_ALIGN + fdt_fixup_gic(blob); +#endif } diff --git a/arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S b/arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S index 72f2c11..0d6ab78 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S +++ b/arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S @@ -10,15 +10,66 @@ #include #include #include +#include #ifdef CONFIG_MP #include #endif #ifdef CONFIG_FSL_LSCH3 #include -#include #endif #include +/* Get GIC offset +* For LS1043a rev1.0, GIC base address align with 4k. +* For LS1043a rev1.1, if DCFG_GIC400_ALIGN[GIC_ADDR_BIT] +* is set, GIC base address align with 4K, or else align +* with 64k. +* output: +* x0: the base address of GICD +* x1: the base address of GICC +*/ +ENTRY(get_gic_offset) + ldr x0, =GICD_BASE +#ifdef CONFIG_GICV2 + ldr x1, =GICC_BASE +#endif +#ifdef CONFIG_HAS_FEATURE_GIC64K_ALIGN + ldr x2, =DCFG_CCSR_SVR + ldr w2, [x2] + rev w2, w2 + mov w3, w2 + ands w3, w3, #SVR_WO_E << 8 + mov w4, #SVR_LS1043A << 8 + cmp w3, w4 + b.ne 1f + ands w2, w2, #0xff + cmp w2, #REV1_0 + b.eq 1f + ldr x2, =SCFG_GIC400_ALIGN + ldr w2, [x2] + rev w2, w2 + tbnz w2, #GIC_ADDR_BIT, 1f + ldr x0, =GICD_BASE_64K +#ifdef CONFIG_GICV2 + ldr x1, =GICC_BASE_64K +#endif +1: +#endif + ret +ENDPROC(get_gic_offset) + +ENTRY(smp_kick_all_cpus) + /* Kick secondary cpus up by SGI 0 interrupt */ +#if defined(CONFIG_GICV2) || defined(CONFIG_GICV3) + mov x29, lr /* Save LR */ + bl get_gic_offset + bl gic_kick_secondary_cpus + mov lr, x29 /* Restore LR */ +#endif + ret +ENDPROC(smp_kick_all_cpus) + + ENTRY(lowlevel_init) mov x29, lr /* Save LR */ @@ -110,15 +161,14 @@ ENTRY(lowlevel_init) /* Initialize GIC Secure Bank Status */ #if defined(CONFIG_GICV2) || defined(CONFIG_GICV3) branch_if_slave x0, 1f - ldr x0, =GICD_BASE + bl get_gic_offset bl gic_init_secure 1: #ifdef CONFIG_GICV3 ldr x0, =GICR_BASE bl gic_init_secure_percpu #elif defined(CONFIG_GICV2) - ldr x0, =GICD_BASE - ldr x1, =GICC_BASE + bl get_gic_offset bl gic_init_secure_percpu #endif #endif @@ -356,7 +406,8 @@ ENTRY(secondary_boot_func) #if defined(CONFIG_GICV3) gic_wait_for_interrupt_m x0 #elif defined(CONFIG_GICV2) - ldr x0, =GICC_BASE + bl get_gic_offset + mov x0, x1 gic_wait_for_interrupt_m x0, w1 #endif diff --git a/arch/arm/include/asm/arch-fsl-layerscape/config.h b/arch/arm/include/asm/arch-fsl-layerscape/config.h index c50894a..1e6a1fa 100644 --- a/arch/arm/include/asm/arch-fsl-layerscape/config.h +++ b/arch/arm/include/asm/arch-fsl-layerscape/config.h @@ -174,6 +174,28 @@ /* Generic Interrupt Controller Definitions */ #define GICD_BASE 0x01401000 #define GICC_BASE 0x01402000 +#define GICH_BASE 0x01404000 +#define GICV_BASE 0x01406000 +#define GICD_SIZE 0x1000 +#define GICC_SIZE 0x2000 +#define GICH_SIZE 0x2000 +#define GICV_SIZE 0x2000 +#ifdef CONFIG_HAS_FEATURE_GIC64K_ALIGN +#define GICD_BASE_64K 0x01410000 +#define GICC_BASE_64K 0x01420000 +#define GICH_BASE_64K 0x01440000 +#define GICV_BASE_64K 0x01460000 +#define GICD_SIZE_64K 0x10000 +#define GICC_SIZE_64K 0x20000 +#define GICH_SIZE_64K 0x20000 +#define GICV_SIZE_64K 0x20000 +#endif + +#define DCFG_CCSR_SVR 0x1ee00a4 +#define REV1_0 0x10 +#define REV1_1 0x11 +#define GIC_ADDR_BIT 31 +#define SCFG_GIC400_ALIGN 0x1570188 #define CONFIG_SYS_FSL_ERRATUM_A008850 #define CONFIG_SYS_FSL_ERRATUM_A009663 diff --git a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h index b3cfd89..81bc5bc 100644 --- a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h +++ b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h @@ -360,7 +360,8 @@ struct ccsr_scfg { u32 qspi_cfg; u8 res_160[0x180-0x160]; u32 dmamcr; - u8 res_184[0x18c-0x184]; + u8 res_184[0x188-0x184]; + u32 gic_align; u32 debug_icid; u8 res_190[0x1a4-0x190]; u32 snpcnfgcr; diff --git a/arch/arm/include/asm/arch-fsl-layerscape/soc.h b/arch/arm/include/asm/arch-fsl-layerscape/soc.h index 78363b6..1deb330 100644 --- a/arch/arm/include/asm/arch-fsl-layerscape/soc.h +++ b/arch/arm/include/asm/arch-fsl-layerscape/soc.h @@ -59,6 +59,7 @@ struct cpu_type { #define SVR_MAJ(svr) (((svr) >> 4) & 0xf) #define SVR_MIN(svr) (((svr) >> 0) & 0xf) +#define SVR_REV(svr) (((svr) >> 0) & 0xff) #define SVR_SOC_VER(svr) (((svr) >> 8) & SVR_WO_E) #define IS_E_PROCESSOR(svr) (!((svr >> 8) & 0x1)) #define IS_SVR_REV(svr, maj, min) \