Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp933072ybp; Wed, 9 Oct 2019 06:30:56 -0700 (PDT) X-Google-Smtp-Source: APXvYqynWtRCjWnZSwWMkg8anJeHvT52X1D8C7zzB3bXPu/pBrfQ2w0MbX+EbSQ7bdyPhOq7XwXJ X-Received: by 2002:a17:906:8313:: with SMTP id j19mr2926525ejx.196.1570627856023; Wed, 09 Oct 2019 06:30:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570627856; cv=none; d=google.com; s=arc-20160816; b=h1HMoil999sPRtaeXQwAlJgDs9mBs795E9z7vQfjyyLrnXhJQMeIUOIfqB+7UO3Gzz Tict6ICjJEatdrzn+56qjSDLprV465RoY/qAZwT3ipEglXrCZoD4LjevDdScNyfqQonN zCpaQz0itLnUy9AAiGyTgcI7L5lYeqMyqd0ztPyLUU9OfsX0fEIuJzu0et1C/lyYVPC/ QT9vD1eMjDXL+O9uVQHDaJe3cP+bUY7o6iBNmCp+p33pi5lt+bMreLCw9fcZU9HPivqb 90WjRXUL0KsCeKaMflJZb5RGE/nnSALkbVF+YUs6pAMtOnOJBzklAqDN0pwxV+wL0o8f Ft5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:to:from; bh=ZCBDCChT5U4FcJu2y6Q5FdymRRUxZPo6wvk/4nAa0gU=; b=zk0y7UB0cb2Pp7n5gUYWsRz13bKc6kcKA7PIVTY1rKkE00XfzupvT8/SZQRU/YeUsW Nxmoyr2iEdrqqwuNxcIJLfiD4tY+lBOZnpqdDVol4cG3ev8wHW81JA1bL0fzUhfCpTJL IjViRfU+TTJ7XnyxSxF4lGOc5BPsX9IOJ6JkTCJhRu9QkYQijIZxml1Ez0tlmW0ws6A3 UfO1f9ovUFTCMq3bPlpnY79B41gyFScZUe10OPVIJjFl2RCsDS7fEHtZR2MVab8XXeO2 HPV0hzs9CfL4wQ/VNHudp2HlGECDwD6gm9qIejpwE8yDsQ5ZpXQvP46nx2Pg+PlERY5N F6yQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b22si1103563eje.299.2019.10.09.06.30.32; Wed, 09 Oct 2019 06:30:56 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731455AbfJIN1d (ORCPT + 99 others); Wed, 9 Oct 2019 09:27:33 -0400 Received: from mx2.suse.de ([195.135.220.15]:47464 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731369AbfJIN1a (ORCPT ); Wed, 9 Oct 2019 09:27:30 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 5AB1BB01E; Wed, 9 Oct 2019 13:27:29 +0000 (UTC) From: Thomas Bogendoerfer To: Ralf Baechle , Paul Burton , James Hogan , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/6] MIPS: fw: arc: workaround 64bit kernel/32bit ARC problems Date: Wed, 9 Oct 2019 15:27:15 +0200 Message-Id: <20191009132718.25346-5-tbogendoerfer@suse.de> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20191009132718.25346-1-tbogendoerfer@suse.de> References: <20191009132718.25346-1-tbogendoerfer@suse.de> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Pointer arguments for 32bit ARC PROMs must reside in CKSEG0/1. While the initial stack resides in CKSEG0 the first kernel thread stack is already placed at a XKPHYS address, which ARC32 can't handle. The workaround here is to use static variables, which are placed into BSS and linked to a CKSEG0 address. Signed-off-by: Thomas Bogendoerfer --- arch/mips/fw/arc/promlib.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/arch/mips/fw/arc/promlib.c b/arch/mips/fw/arc/promlib.c index be381307fbb0..5e9e840a9314 100644 --- a/arch/mips/fw/arc/promlib.c +++ b/arch/mips/fw/arc/promlib.c @@ -11,6 +11,21 @@ #include #include +#if defined(CONFIG_64BIT) && defined(CONFIG_FW_ARC32) +/* + * For 64bit kernels working with a 32bit ARC PROM pointer arguments + * for ARC calls need to reside in CKEG0/1. But as soon as the kernel + * switches to it's first kernel thread stack is set to an address in + * XKPHYS, so anything on stack can't be used anymore. This is solved + * by using a * static declartion variables are put into BSS, which is + * linked to a CKSEG0 address. Since this is only used on UP platforms + * there is not spinlock needed + */ +#define O32_STATIC static +#else +#define O32_STATIC +#endif + /* * IP22 boardcache is not compatible with board caches. Thus we disable it * during romvec action. Since r4xx0.c is always compiled and linked with your @@ -23,8 +38,10 @@ void prom_putchar(char c) { - ULONG cnt; - CHAR it = c; + O32_STATIC ULONG cnt; + O32_STATIC CHAR it; + + it = c; bc_disable(); ArcWrite(1, &it, 1, &cnt); @@ -33,8 +50,8 @@ void prom_putchar(char c) char prom_getchar(void) { - ULONG cnt; - CHAR c; + O32_STATIC ULONG cnt; + O32_STATIC CHAR c; bc_disable(); ArcRead(0, &c, 1, &cnt); -- 2.16.4