Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965048AbbBCLlK (ORCPT ); Tue, 3 Feb 2015 06:41:10 -0500 Received: from mail-ie0-f172.google.com ([209.85.223.172]:47439 "EHLO mail-ie0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964961AbbBCLlG convert rfc822-to-8bit (ORCPT ); Tue, 3 Feb 2015 06:41:06 -0500 MIME-Version: 1.0 In-Reply-To: <20150203113744.GA3677@e104818-lin.cambridge.arm.com> References: <1422881149-8177-1-git-send-email-hanjun.guo@linaro.org> <1422881149-8177-3-git-send-email-hanjun.guo@linaro.org> <2422968.Es7R0p3loO@vostro.rjw.lan> <54D0901A.2080406@linaro.org> <20150203113744.GA3677@e104818-lin.cambridge.arm.com> Date: Tue, 3 Feb 2015 11:41:05 +0000 Message-ID: Subject: Re: [PATCH v8 02/21] acpi: fix acpi_os_ioremap for arm64 From: Ard Biesheuvel To: Catalin Marinas Cc: "hanjun.guo@linaro.org" , Mark Rutland , Mark Langsdorf , "linaro-acpi@lists.linaro.org" , Will Deacon , "wangyijing@huawei.com" , Rob Herring , Lorenzo Pieralisi , Timur Tabi , Daniel Lezcano , "linux-acpi@vger.kernel.org" , "msalter@redhat.com" , "grant.likely@linaro.org" , Charles Garcia-Tobin , "phoenix.liyi@huawei.com" , Robert Richter , Jason Cooper , Arnd Bergmann , Marc Zyngier , "jcm@redhat.com" , Mark Brown , Bjorn Helgaas , "linux-arm-kernel@lists.infradead.org" , Ashwin Chaugule , "graeme.gregory@linaro.org" , Randy Dunlap , "Rafael J. Wysocki" , "linux-kernel@vger.kernel.org" , "suravee.suthikulpanit@amd.com" , Sudeep Holla , Olof Johansson Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2995 Lines: 75 On 3 February 2015 at 11:37, Catalin Marinas wrote: > On Tue, Feb 03, 2015 at 09:08:42AM +0000, Hanjun Guo wrote: >> On 2015年02月03日 06:14, Rafael J. Wysocki wrote: >> > On Monday, February 02, 2015 08:45:30 PM Hanjun Guo wrote: >> >> From: Mark Salter >> >> >> >> The acpi_os_ioremap() function may be used to map normal RAM or IO >> >> regions. The current implementation simply uses ioremap_cache(). This >> >> will work for some architectures, but arm64 ioremap_cache() cannot be >> >> used to map IO regions which don't support caching. So for arm64, use >> >> ioremap() for non-RAM regions. >> >> >> >> CC: Rafael J Wysocki >> >> Signed-off-by: Mark Salter >> >> Signed-off-by: Hanjun Guo >> >> --- >> >> include/acpi/acpi_io.h | 6 ++++++ >> >> 1 file changed, 6 insertions(+) >> >> >> >> diff --git a/include/acpi/acpi_io.h b/include/acpi/acpi_io.h >> >> index 444671e..9d573db 100644 >> >> --- a/include/acpi/acpi_io.h >> >> +++ b/include/acpi/acpi_io.h >> >> @@ -1,11 +1,17 @@ >> >> #ifndef _ACPI_IO_H_ >> >> #define _ACPI_IO_H_ >> >> >> >> +#include >> >> #include >> >> >> >> static inline void __iomem *acpi_os_ioremap(acpi_physical_address phys, >> >> acpi_size size) >> >> { >> >> +#ifdef CONFIG_ARM64 >> >> + if (!page_is_ram(phys >> PAGE_SHIFT)) >> >> + return ioremap(phys, size); >> >> +#endif >> > >> > I don't want to see #ifdef CONFIG_ARM64 in this file. >> > >> > There are multiple examples of how things like this are done. Generally, >> > the logic is "If the architecture provides its own function for this, use >> > that one, or use the generic one provided here otherwise." >> >> OK. I think weak function would work. > > Probably not in a header file. It's better to define acpi_os_ioremap() > in an arm64 kernel file, together with something like: > > #define ARCH_HAS_ACPI_OS_IOREMAP > > and the corresponding #ifdef's in the acpi_io.h file. > > On arm64 could we make this function call iorema (nocache) all the time? > We need to clarify the contexts where this is used in the core ACPI > code. The acpi_map() function for example checks if the page is ram and > does a kmap(). Do we need to handle the NVS on arm64? AFAICT, we don't > even compile drivers/acpi/sleep.c in. > > Are there other cases where acpi_os_ioremap() is called directly and it > needs a cacheable mapping? > The logic behind acpi_os_ioremap() could be based on the physmem series I am preparing for 3.21 timeframe. It allows us to classify physical ranges as backed by RAM or not, and call the appropriate flavor of ioremap() -- Ard. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/