Received: by 10.223.176.46 with SMTP id f43csp2475627wra; Sun, 21 Jan 2018 21:06:17 -0800 (PST) X-Google-Smtp-Source: AH8x227/mAyCstlD9JGoU4qVc+vp0pCaTWE2ZCyG/FRmlsgvcaJBmEgDadv0LCX0Y+hDIxHey1QN X-Received: by 10.99.55.66 with SMTP id g2mr6329138pgn.61.1516597577629; Sun, 21 Jan 2018 21:06:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516597577; cv=none; d=google.com; s=arc-20160816; b=i/oUvzvb1dbpfE/wMFVkEJKhFmUqcAI9nT1LNiS78AhJqWuitM6VHSKR8oQY+dXrhD rQCplVky+Z/kHK0SLnrEVFi4fcAimlyCVy7Mk4eHLDHv1CEiOJRjEoGOYwljy0OFwHRd M98JEmnytQsp6QvANKvwIfDl5UjgnGU8Sh9OzRTG8qWUzjemxkLkUUfevRZH7vg99Y0v R7AEoHhtNN+7D54+eNCNHTlHbl0S6AtOuwg9A7SoCJ6QiTpgVDjAjYlTIKcSBohX4xEQ evBgnuEa9PkJeMMSE5Q3DBCHEpL39mCxue4L3Et/B7tqBiJ/LAHi1hf+/rnbGjdb+RjN m00g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=svZWSUaantnS//6qf9J6WlcPKA2pJYAVK2Ea4iChblg=; b=RVH/Akqd7j0q4zwB5Z0DBS602qK6TCJWtBESbiqP4R3cKoGbRnJQyn8ru9WTZS2fbs tbMN8J9WMpbXC5NWPJBZr6zPLn6YwdXsItfOWVzp6RxrtH9P8Uy2iU38WW5WjfFXT0Xk jfY4SsxZRR3LXzR+X/UUalQqUGw9GEi/0Y5Bw7hAlWm3LDpUkmL5ibxThiPCxKr0uSqz MMIpZJxW1JC85Zuv7y1Zx3qT+e3NhsiRpzQVY/H/PVMG849L+GzAa5m6t08I7KyBjXyz hS9WSrA+Rr4fCHQox33i2GUdsPSqCAdY4Hjubdl0ajm+wEphXEpIOCbI48KtO201sOif fHbg== 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 u14si13097268pgn.261.2018.01.21.21.06.03; Sun, 21 Jan 2018 21:06:17 -0800 (PST) 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 S1751137AbeAVFEn (ORCPT + 99 others); Mon, 22 Jan 2018 00:04:43 -0500 Received: from mout.gmx.net ([212.227.17.20]:52264 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751059AbeAVFEk (ORCPT ); Mon, 22 Jan 2018 00:04:40 -0500 Received: from localhost.localdomain ([88.153.6.51]) by mail.gmx.com (mrgmx101 [212.227.17.168]) with ESMTPSA (Nemesis) id 0Mhdex-1eQTph1xtT-00Mqbc; Mon, 22 Jan 2018 06:04:26 +0100 From: =?UTF-8?q?Jonathan=20Neusch=C3=A4fer?= To: linux-kernel@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, =?UTF-8?q?Jonathan=20Neusch=C3=A4fer?= , Albert Herranz , Tom Lendacky , Borislav Petkov , Brijesh Singh , Thomas Gleixner Subject: [PATCH v2 1/6] resource: Extend the PPC32 reserved memory hack Date: Mon, 22 Jan 2018 06:04:06 +0100 Message-Id: <20180122050411.32460-2-j.neuschaefer@gmx.net> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180122050411.32460-1-j.neuschaefer@gmx.net> References: <20180122050411.32460-1-j.neuschaefer@gmx.net> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K0:vTHIJJXWQJuMqm7WTzeOWf00hH8opX7HjobMki9Y4ZZjgST5I5l PYiiM+e9u6cOELN+4tRZlD5y2xhq50f3LeJuvS+kVDWu+Xh+3MiLrcMuRLfLHN2moB+nkFU uTDM76Pxnh7Wxh027tOO5jYkN2avH8gSyUMj08bnJK2FExGE1ZXVwoPrx18USpptCENq6xI BgZZKyVDJaYYGWGK28HqA== X-UI-Out-Filterresults: notjunk:1;V01:K0:pUapvkcc5sA=:J8CbC+vU+/buwACMqPPEC/ 72Mg5rPtkaXEVWLjir7oVOpVU4oo4pnrX8kVMvzcIRyO06jWk4VrArAV7EV4aLvdxyz9ua2FI duCZPcWrjDmS7vKh0h0Z/1rqkLHrSIbcGvWvuOOVQKDKkqS1uOfLf/z/FgfmraffC611cxm3L OID2qOQ/kv4EBtztXHEqfo2/I23SOBM9WrR0Z9l81iLolaN05Psoam+BHAPKOCZ0nf02QpoEd lQQCxD3y52oRBF3xUXESa0Zx4SNwRIj1RLF0fyqHkcHBTsCiTRw/cgI6uROALMj0ebjOHwccT dDn8l4nhBI3u21sgTuwNYVeC220c/s0QRPMK/GP5zQQFT8FUFu9e56Qt7f/xSNUlSE0UpKqZY PBQYGrJkM8HWqGdQIST9BuPpsm9aRzA2qtcHk8SwmzhsTXHoFbrp2t3TuZvUnAiVSvsBc2ief bcnjgoJ92xKc6QXR/sx+pH+tUMW8fowECfmbocD4rbT3iJr4bHaVSCsPRyOQrbmjUO8QrO7SW uXXn78C87QrSKPujbfuuztdv4rCf33xz8K2Czdl4GQo4gLFCniSK+P72Om1PkQ9A7Zm+UJqGF j4CIA+EF9wwMdxq7a21s/cZh2zBwHIyDcXET0uqt0oSea8v+7b41/6P3vHvJhxcFuVG9MAnFj ss2h8dGIzd+28mc6E1qugGuTgJru5cknngc2piRGVJDKCDSJlPqoBzXA5Yvgv1pyKHk9xncfc E5c8HUnO2POO7YlmxIdGEtjPJutx+F01ODQof2dr+XpnI7hYyFa1SjAQChu2jZbToQiBU9rhX ievdiXzZWI4yGSPtZ7Vb3B9pbEYh5rgKECGFMVlGz0jlf/qSi0= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On the Nintendo Wii, there are two ranges of physical memory, and MMIO in between, but Linux on ppc32 doesn't support discontiguous memory. Therefore a hack was introduced in commit c5df7f775148 ("powerpc: allow ioremap within reserved memory regions") and commit de32400dd26e ("wii: use both mem1 and mem2 as ram"): - Treat the area from the start of the first memory area (MEM1) to the end of the second (MEM2) as one big memory area, but mark the part that doesn't belong to MEM1 or MEM2 as reserved. - Only on the Wii, allow ioremap to be used on reserved memory. This hack, however, doesn't account for the "resource"-based API in kernel/resource.c, because __request_region performs its own checks. Extend the hack to kernel/resource.c, to allow more drivers to allocate their MMIO regions on the Wii. Signed-off-by: Jonathan Neuschäfer Cc: Albert Herranz --- v2: - CC Albert Herranz, who introduced this hack in 2009. --- kernel/resource.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/kernel/resource.c b/kernel/resource.c index 54ba6de3757c..bb3d329329da 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -1134,6 +1134,24 @@ resource_size_t resource_alignment(struct resource *res) static DECLARE_WAIT_QUEUE_HEAD(muxed_resource_wait); +/* + * On some ppc32 platforms (Nintendo Wii), reserved memory is used to work + * around the fact that Linux doesn't support discontiguous memory (all memory + * is treated as one large area with holes punched in it), and reserved memory + * is allowed to be allocated. + */ +#ifdef CONFIG_PPC32 +static bool conflict_ignored(struct resource *conflict) +{ + extern int __allow_ioremap_reserved; + + return __allow_ioremap_reserved && + (conflict->flags & IORESOURCE_SYSRAM); +} +#else +static bool conflict_ignored(struct resource *conflict) { return false; } +#endif + /** * __request_region - create a new busy resource region * @parent: parent resource descriptor @@ -1166,8 +1184,9 @@ struct resource * __request_region(struct resource *parent, res->desc = parent->desc; conflict = __request_resource(parent, res); - if (!conflict) + if (!conflict || conflict_ignored(conflict)) break; + if (conflict != parent) { if (!(conflict->flags & IORESOURCE_BUSY)) { parent = conflict; -- 2.15.1