From patchwork Mon Jan 22 05:04:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?J=2E_Neusch=C3=A4fer?= X-Patchwork-Id: 864145 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zPzry1bzMz9s7M for ; Mon, 22 Jan 2018 16:05:22 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751121AbeAVFEn (ORCPT ); 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_Neusch=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_Neusch=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 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-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@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; From patchwork Mon Jan 22 05:04:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?J=2E_Neusch=C3=A4fer?= X-Patchwork-Id: 864146 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zPzsC33pWz9sBZ for ; Mon, 22 Jan 2018 16:05:35 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751073AbeAVFEj (ORCPT ); Mon, 22 Jan 2018 00:04:39 -0500 Received: from mout.gmx.net ([212.227.17.20]:65024 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751048AbeAVFEg (ORCPT ); Mon, 22 Jan 2018 00:04:36 -0500 Received: from localhost.localdomain ([88.153.6.51]) by mail.gmx.com (mrgmx101 [212.227.17.168]) with ESMTPSA (Nemesis) id 0MPYqL-1ehb0p3x0z-004lWY; Mon, 22 Jan 2018 06:04:31 +0100 From: =?utf-8?q?Jonathan_Neusch=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_Neusch=C3=A4fer?= , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman Subject: [PATCH v2 2/6] powerpc: wii: Explicitly configure GPIO owner for poweroff pin Date: Mon, 22 Jan 2018 06:04:07 +0100 Message-Id: <20180122050411.32460-3-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 X-Provags-ID: V03:K0:ipEcxI650fqJqLRTlEyk0Ce/9hzbUDHR/tAd6LhSK/yl8aTtQa4 GpD6UpndgicEmMfcrxcb5q7ZGfT5GMXawN0/Xksmid95bfsZMN6rFrVSkGhRC9Ohxch3yML A1J5StMlXQyXiCm8Q3z4Ty8L48ZpDXaIxmAhTzJBT3RPLfRxf2thb5tFTnqgj5hd3ITDKnt 8INL8kGqlYV7RLxtsQuTg== X-UI-Out-Filterresults: notjunk:1; V01:K0:/bg58mqbduc=:8kvpzSeyv4KXTONn5gjVWY TUjgeAsg3DNs4gRvM0nrzqIwhsSN9dAK448xr8zb23nohlT7X7DuTIJ9kpizeVVR9pLUrIb1Q jpFBo9naIYnIe/D/u7kYYLa5CzIYQQs2g7UQjmzhO6MR3FMz10PWk4Uv5/j2wXBFmHTNRdo2I YlUhfJaqUk3i6XLEBaY7G1HU2vm0UHcPHmVTrzOCcipRSAAHqOYdav7u66fc2IS51wDHp35zR 7TFVMfjmnYBEU2WFx5bv1AY8MqWTnGYMKrC5/bXxNvzYKiIQI/a/wojCre0MB5WyypdOJa0iG 8FIcv2VQEYo173E16G3wU4hcY7Qvz2jrzSUFFb4evKFUnsqeCq/QtPniokXvFy32VTek0GeMW oQ//wPkqoGAsHYShCAOjYRkdFOZYX8eNG45YV68vq26a5tOTT7mvjuXS2VUXfbF+6zE1tJcSB QEW1i+LH+d/zPs6Cq7AeS93DgLuZjymn1g0zSr3pt+hiPFAs5NuZVv7jo/3RH+SqBRfM/pQFt OD0vvw9CbN5wWT1p3hSxYGWlEk5RhXFoBaR1akBgJGy6mJ62cCWFK3ueMSnfawqWYBi3WlggO SukggbEpFuwigZYproqpcoMb/2kPqgUKP03NeqLnpyXBT2EUubzpyCOeT3V8S5cyKCOLRsJjB hzNMOCQAq0s75NWbxCK2s6RUggVYcIh4T8AxRcGDSZerswhGgE5REW9DFJtCkkMfN+Ykbu7mH hv8d4zP9ZsVcFuEH1CGtZ9x/thuYWRoJz1EwUD+uOHRp5xJAJzqHswTfAhDVFxR1vI+j7sCvq ix1/OWMFoc/WWelLpgtfOlfH3DiByz0+IYMIUAIBQIYVj8WIYM= Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org The Hollywood chipset's GPIO controller has two sets of registers: One for access by the PowerPC CPU, and one for access by the ARM coprocessor (but both are accessible from the PPC because the memory firewall (AHBPROT) is usually disabled when booting Linux, today). The wii_power_off function currently assumes that the poweroff GPIO pin is configured for use via the ARM side, but the upcoming GPIO driver configures all pins for use via the PPC side, breaking poweroff. Configure the owner register explicitly in wii_power_off to make wii_power_off work with and without the new GPIO driver. I think the Wii can be switched to the generic gpio-poweroff driver, after the GPIO driver is merged. Signed-off-by: Jonathan Neuschäfer --- v2: - no change --- arch/powerpc/platforms/embedded6xx/wii.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/powerpc/platforms/embedded6xx/wii.c b/arch/powerpc/platforms/embedded6xx/wii.c index 79a1fe54ebc9..6e6db1e16d71 100644 --- a/arch/powerpc/platforms/embedded6xx/wii.c +++ b/arch/powerpc/platforms/embedded6xx/wii.c @@ -45,6 +45,7 @@ #define HW_GPIO_BASE(idx) (idx * 0x20) #define HW_GPIO_OUT(idx) (HW_GPIO_BASE(idx) + 0) #define HW_GPIO_DIR(idx) (HW_GPIO_BASE(idx) + 4) +#define HW_GPIO_OWNER (HW_GPIO_BASE(1) + 0x1c) #define HW_GPIO_SHUTDOWN (1<<1) #define HW_GPIO_SLOT_LED (1<<5) @@ -177,6 +178,12 @@ static void wii_power_off(void) local_irq_disable(); if (hw_gpio) { + /* + * set the owner of the shutdown pin to ARM, because it is + * accessed through the registers for the ARM, below + */ + clrbits32(hw_gpio + HW_GPIO_OWNER, HW_GPIO_SHUTDOWN); + /* make sure that the poweroff GPIO is configured as output */ setbits32(hw_gpio + HW_GPIO_DIR(1), HW_GPIO_SHUTDOWN); From patchwork Mon Jan 22 05:04:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?J=2E_Neusch=C3=A4fer?= X-Patchwork-Id: 864144 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zPzrm41L0z9s7M for ; Mon, 22 Jan 2018 16:05:12 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751059AbeAVFEn (ORCPT ); Mon, 22 Jan 2018 00:04:43 -0500 Received: from mout.gmx.net ([212.227.17.22]:51854 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751058AbeAVFEk (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 0Li0dC-1f8vHX3GdO-00nD93; Mon, 22 Jan 2018 06:04:33 +0100 From: =?utf-8?q?Jonathan_Neusch=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_Neusch=C3=A4fer?= , Albert Herranz , Segher Boessenkool , Linus Walleij Subject: [PATCH v2 3/6] gpio: Add GPIO driver for Nintendo Wii Date: Mon, 22 Jan 2018 06:04:08 +0100 Message-Id: <20180122050411.32460-4-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 X-Provags-ID: V03:K0:ibEeOxCOZl9oNbKcAJkfcgUJVUu/7MTDSaqSu6AcZBz+yAzFe6f y2iE3HKAYmVahSUqQ01sjABMeFM+8OUwcxi61MkSverbzbFhclJfF0gwVDqborfbzxerw6g DH1eNKND+u0yIZvSdFqt4VGOuxWUkugyFlmcp7vonYZGlLjQ/FxxylCxNgqCHVaOgsvhq/X P8VUrNW/frU4BQU6vLAxw== X-UI-Out-Filterresults: notjunk:1; V01:K0:khOXZyZIUYA=:kHSNh2ltd+zvEX0N2QBgS9 PLlfouPLBINJqTZ5qfE7qwFdJ5kKD57jXGcifbvP7ZcOFAbHOhfB/3raymVONlt8B9+gMccHU mgiMHfKLiIdJCpBEUmXlJICSkG9I4enqD2BCEagzpVfBTfB8PmGjLwfQczZmki8OOQz6DXDTe ezxdGUgsIeimCYCqnbNqrNKU0RFqXztrHw+my+jy6HZt5qJGNcgECI6cSFBq7gmjZj2MVB1sd txqtUfAiVRRVObmdJlB53ixaKAAenhdSftCRv1wVmwttmNdB9GyPZmlZCCFljW6kv0Sc9Umg+ Fk6AURqO+1JG3CW3Sms7kbDkqepzCSWBItgcrOfFX0JnJ3MQTU/eS2skb0jnCB4mOmns8PdXB xYqPqvXMQee5eqlRaKf6suvzVAwpHtetZj5Xv3078NST/k6pSdcdphYSX0k/XJWN/I/GCzstF cgQHOhJVTHT7G6xwiSB+Kh34jgWill0dYKpsuNFCNxy5bvlatVQBXYFlTOLv3KXzXtj3bSLbM W8XfuoUBvGjqFe8gfpmLMsuju/N30f5YODLysZM5PH/a4CxZr9CWJZAc2eU1gV3p1F9ht2qjb cEW3gJQmLF8Qqd7VbSeRDWpkr8HkW6eJX7dYsW+I5w7sY+Cj88QY5+7HlklaWV7RZNRCaoTyN zyoBHiMo7KuCkpZoaz1EV+ZZqvsnnfJdHnLS2l0AyB87jnP6Mwl/Aavp7ZMWtZ+mrQfPGBtPD +rMgq5sK9onPKawAglq8NyU4h0vpkJsEITDZSAzz8qhtbMwDpWH/Tgo44xVhu/NlYkdhY4mZf o+NWTgpFbthHyt/M7CAz4H5dtyL06CUjeSvRDI37+MLf0ZQX6U= Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org The Nintendo Wii's chipset (called "Hollywood") has a GPIO controller that supports a configurable number of pins (up to 32), interrupts, and some special mechanisms to share the controller between the system's security processor (an ARM926) and the PowerPC CPU. Pin multiplexing is not supported. This patch adds a basic driver for this GPIO controller. Interrupt support will come in a later patch. This patch is based on code developed by Albert Herranz and the GameCube Linux Team, file arch/powerpc/platforms/embedded6xx/hlwd-gpio.c, available at https://github.com/DeltaResero/GC-Wii-Linux-Kernels, but has grown quite dissimilar. Signed-off-by: Jonathan Neuschäfer Cc: Albert Herranz Cc: Segher Boessenkool --- v2: - Change hlwd_gpio_driver.driver.name to "gpio-hlwd" to match the filename (was "hlwd_gpio") - Remove unnecessary include of linux/of_gpio.h, as suggested by Linus Walleij. - Add struct device pointer to context struct to make it possible to use dev_info(hlwd->dev, "..."), as suggested by Linus Walleij - Use the GPIO_GENERIC library to reduce code size, as suggested by Linus Walleij - Use iowrite32be instead of __raw_writel for big-endian MMIO access, as suggested by Linus Walleij - Remove commit message paragraph suggesting to diff against the original driver, because it's so different now --- drivers/gpio/Kconfig | 9 ++++ drivers/gpio/Makefile | 1 + drivers/gpio/gpio-hlwd.c | 123 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 drivers/gpio/gpio-hlwd.c diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index d6a8e851ad13..47606dfe06cc 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -229,6 +229,15 @@ config GPIO_GRGPIO Select this to support Aeroflex Gaisler GRGPIO cores from the GRLIB VHDL IP core library. +config GPIO_HLWD + tristate "Nintendo Wii (Hollywood) GPIO" + depends on OF_GPIO + select GPIO_GENERIC + help + Select this to support the GPIO controller of the Nintendo Wii. + + If unsure, say N. + config GPIO_ICH tristate "Intel ICH GPIO" depends on PCI && X86 diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile index 4bc24febb889..492f62d0eb59 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -54,6 +54,7 @@ obj-$(CONFIG_GPIO_FTGPIO010) += gpio-ftgpio010.o obj-$(CONFIG_GPIO_GE_FPGA) += gpio-ge.o obj-$(CONFIG_GPIO_GPIO_MM) += gpio-gpio-mm.o obj-$(CONFIG_GPIO_GRGPIO) += gpio-grgpio.o +obj-$(CONFIG_GPIO_HLWD) += gpio-hlwd.o obj-$(CONFIG_HTC_EGPIO) += gpio-htc-egpio.o obj-$(CONFIG_GPIO_ICH) += gpio-ich.o obj-$(CONFIG_GPIO_INGENIC) += gpio-ingenic.o diff --git a/drivers/gpio/gpio-hlwd.c b/drivers/gpio/gpio-hlwd.c new file mode 100644 index 000000000000..cf3f05a1621c --- /dev/null +++ b/drivers/gpio/gpio-hlwd.c @@ -0,0 +1,123 @@ +// SPDX-License-Identifier: GPL-2.0+ +// Copyright (C) 2008-2009 The GameCube Linux Team +// Copyright (C) 2008,2009 Albert Herranz +// Copyright (C) 2017-2018 Jonathan Neuschäfer +// +// Nintendo Wii (Hollywood) GPIO driver + +#include +#include +#include +#include +#include +#include +#include + +/* + * Register names and offsets courtesy of WiiBrew: + * https://wiibrew.org/wiki/Hardware/Hollywood_GPIOs + * + * Note that for most registers, there are two versions: + * - HW_GPIOB_* Is always accessible by the Broadway PowerPC core, but does + * always give access to all GPIO lines + * - HW_GPIO_* Is only accessible by the Broadway PowerPC code if the memory + * firewall (AHBPROT) in the Hollywood chipset has been configured to allow + * such access. + * + * The ownership of each GPIO line can be configured in the HW_GPIO_OWNER + * register: A one bit configures the line for access via the HW_GPIOB_* + * registers, a zero bit indicates access via HW_GPIO_*. This driver uses + * HW_GPIOB_*. + */ +#define HW_GPIOB_OUT 0x00 +#define HW_GPIOB_DIR 0x04 +#define HW_GPIOB_IN 0x08 +#define HW_GPIOB_INTLVL 0x0c +#define HW_GPIOB_INTFLAG 0x10 +#define HW_GPIOB_INTMASK 0x14 +#define HW_GPIOB_INMIR 0x18 +#define HW_GPIO_ENABLE 0x1c +#define HW_GPIO_OUT 0x20 +#define HW_GPIO_DIR 0x24 +#define HW_GPIO_IN 0x28 +#define HW_GPIO_INTLVL 0x2c +#define HW_GPIO_INTFLAG 0x30 +#define HW_GPIO_INTMASK 0x34 +#define HW_GPIO_INMIR 0x38 +#define HW_GPIO_OWNER 0x3c + + +struct hlwd_gpio { + struct gpio_chip gpioc; + void __iomem *regs; + struct device *dev; +}; + +static int hlwd_gpio_probe(struct platform_device *pdev) +{ + struct hlwd_gpio *hlwd; + struct resource *regs_resource; + u32 ngpios; + int res; + + hlwd = devm_kzalloc(&pdev->dev, sizeof(*hlwd), GFP_KERNEL); + if (!hlwd) + return -ENOMEM; + + /* Save the struct device pointer so dev_info, etc. can be used. */ + hlwd->dev = &pdev->dev; + + regs_resource = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (IS_ERR(regs_resource)) + return PTR_ERR(regs_resource); + + hlwd->regs = devm_ioremap_resource(&pdev->dev, regs_resource); + if (IS_ERR(hlwd->regs)) + return PTR_ERR(hlwd->regs); + + /* + * Claim all GPIOs using the OWNER register. This will not work on + * systems where the AHBPROT memory firewall hasn't been configured to + * permit PPC access to HW_GPIO_*. + * + * Note that this has to happen before bgpio_init reads the + * HW_GPIOB_OUT and HW_GPIOB_DIR, because otherwise it reads the wrong + * values. + */ + iowrite32be(0xffffffff, hlwd->regs + HW_GPIO_OWNER); + + res = bgpio_init(&hlwd->gpioc, &pdev->dev, 4, + hlwd->regs + HW_GPIOB_IN, hlwd->regs + HW_GPIOB_OUT, + NULL, hlwd->regs + HW_GPIOB_DIR, NULL, + BGPIOF_BIG_ENDIAN_BYTE_ORDER); + + if (res < 0) { + dev_warn(hlwd->dev, "bgpio_init failed: %d\n", res); + return res; + } + + if (of_property_read_u32(pdev->dev.of_node, "ngpios", &ngpios)) + ngpios = 32; + hlwd->gpioc.ngpio = ngpios; + + return devm_gpiochip_add_data(&pdev->dev, &hlwd->gpioc, hlwd); +} + +static const struct of_device_id hlwd_gpio_match[] = { + { .compatible = "nintendo,hollywood-gpio", }, + {}, +}; +MODULE_DEVICE_TABLE(of, hlwd_gpio_match); + +static struct platform_driver hlwd_gpio_driver = { + .driver = { + .name = "gpio-hlwd", + .of_match_table = hlwd_gpio_match, + }, + .probe = hlwd_gpio_probe, +}; +module_platform_driver(hlwd_gpio_driver); + +MODULE_AUTHOR("Jonathan Neuschäfer "); +MODULE_DESCRIPTION("Nintendo Wii GPIO driver"); +MODULE_LICENSE("GPL"); From patchwork Mon Jan 22 05:04:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?J=2E_Neusch=C3=A4fer?= X-Patchwork-Id: 864142 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zPzrM5Mczz9sBZ for ; Mon, 22 Jan 2018 16:04:51 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751181AbeAVFEu (ORCPT ); Mon, 22 Jan 2018 00:04:50 -0500 Received: from mout.gmx.net ([212.227.17.22]:57224 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751058AbeAVFEr (ORCPT ); Mon, 22 Jan 2018 00:04:47 -0500 Received: from localhost.localdomain ([88.153.6.51]) by mail.gmx.com (mrgmx101 [212.227.17.168]) with ESMTPSA (Nemesis) id 0M97Nh-1eVUap2ilh-00CUD4; Mon, 22 Jan 2018 06:04:38 +0100 From: =?utf-8?q?Jonathan_Neusch=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_Neusch=C3=A4fer?= , Linus Walleij , Rob Herring , Mark Rutland , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman Subject: [PATCH v2 4/6] dt-bindings: gpio: Add binding for Wii GPIO controller Date: Mon, 22 Jan 2018 06:04:09 +0100 Message-Id: <20180122050411.32460-5-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 X-Provags-ID: V03:K0:EJbVWWO41fMC1/OKS3FD40xAEE5Q5hJ43RCQmExKD31oZ9Oldwb N+fMxxJ7oeuf5Vfx2jcdJxQfuisE6PdUmgWFXp9nnYiC4L1HkOc0rF0c2wN9WuaaLB3CmFn JV8hXoGJDCeZJPgSJVl4mUzKBSZ7yIbTlqsxtQCm/2NqhAHN34iuxMcS9zLF6XYK7nPimx/ pzodc3y2PphYb0QvL167g== X-UI-Out-Filterresults: notjunk:1; V01:K0:EpWd8LH/JK0=:I3d3UqU1UkT2QYi3UJ2nF0 NMyhEqg2KXcp457HKb7YbFzrYdPJLMn1OME4oYNIkEmdFk+WmLsrHctDWC6oz0ohRxmkGQomv K+6aFqar/ZJFX+SGVd2ZJl4dty0dZAkeJ2jnfU2exme4RGHKhHV7tGCprunADcTg5hlYbscWM +wrrYaa9M4M4nT5d1YIw9Xzx+xP869ueMt2vQYaPUQVBX2KUOXoG9SI5ufARxypfrY4LjcHoV eNoSdnoGdiIEHQoiZLJKybEA2eXrFx3kc3V+dGuMd7FIZKluN/KQO1yiG5lpz9bQuNPeo9MMQ SdhcsnmqJgjZrCvSzPRet+QfWtQTfXvF4E5F1QivKYuVl49hdwZ9tNd+ZOK36Pb+NqSCrbW0t JluCTczP3uZ87GkWok1s1bB1dmKe2WCB60Dv7DCCTNBfm7t3G1/7RegaE5LNKaZymQxy7WUnm yPiZaYSpJKztegW+BPG4XN2Frei4uTRk3Yo7lwopYix/SOgYvCNQ02U8wQOENOqAo67Gvi1lD agdjqLZlgn709nnDVWXQCD0KDne2W6qwKnN70mlPWwj+DPsVN8M9y73gZh7SX6nom1K6lgEiB UToyxRK1X/9e8kBQO6Y7/olN5Sd9xqVBbL0PExj6oc0vVhR3PAhi57yRIsAWXJxtPeKerCp5M 4Y3/JmEphVWzKNBdkGRs7yC0khfieZHtNn3AVeWdPLWun/IK2GnNitLzruET9o23mBUBjbkFI Lf7rCW48fuYwJ54Fo9uHnv9BPBVkK8iqbHWLHlW78mMbL9QGdKG7jsfpVWckCNymMmy8kkj0w ikqkapXUtGmjcYvQLCW6+f3ujvWlSE6M2ig/CkmpoJcezfrGrQ= Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org The Nintendo Wii game console has a GPIO controller, which is used for the optical disk slot LED, buttons, poweroff, etc. This patch adds a binding for this GPIO controller. Signed-off-by: Jonathan Neuschäfer Reviewed-by: Rob Herring --- v2: - Drop the leading zero in the example, as suggested by Rob Herring - Add some text to the commit message, as suggested by Linus Walleij --- .../bindings/gpio/nintendo,hollywood-gpio.txt | 27 ++++++++++++++++++++++ .../devicetree/bindings/powerpc/nintendo/wii.txt | 9 +------- 2 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 Documentation/devicetree/bindings/gpio/nintendo,hollywood-gpio.txt diff --git a/Documentation/devicetree/bindings/gpio/nintendo,hollywood-gpio.txt b/Documentation/devicetree/bindings/gpio/nintendo,hollywood-gpio.txt new file mode 100644 index 000000000000..20fc72d9e61e --- /dev/null +++ b/Documentation/devicetree/bindings/gpio/nintendo,hollywood-gpio.txt @@ -0,0 +1,27 @@ +Nintendo Wii (Hollywood) GPIO controller + +Required properties: +- compatible: "nintendo,hollywood-gpio +- reg: Physical base address and length of the controller's registers. +- gpio-controller: Marks the device node as a GPIO controller. +- #gpio-cells: Should be <2>. The first cell is the pin number and the + second cell is used to specify optional parameters: + - bit 0 specifies polarity (0 for normal, 1 for inverted). + +Optional properties: +- ngpios: see Documentation/devicetree/bindings/gpio/gpio.txt +- interrupt-controller: Marks the device node as an interrupt controller. +- #interrupt-cells: Should be two. +- interrupts: Interrupt specifier for the controller's Broadway (PowerPC) + interrupt. +- interrupt-parent: phandle of the parent interrupt controller. + +Example: + + GPIO: gpio@d8000c0 { + #gpio-cells = <2>; + compatible = "nintendo,hollywood-gpio"; + reg = <0x0d8000c0 0x40>; + gpio-controller; + ngpios = <24>; + } diff --git a/Documentation/devicetree/bindings/powerpc/nintendo/wii.txt b/Documentation/devicetree/bindings/powerpc/nintendo/wii.txt index 36afa322b04b..a3dc4b9fa11a 100644 --- a/Documentation/devicetree/bindings/powerpc/nintendo/wii.txt +++ b/Documentation/devicetree/bindings/powerpc/nintendo/wii.txt @@ -152,14 +152,7 @@ Nintendo Wii device tree 1.l) The General Purpose I/O (GPIO) controller node - Represents the dual access 32 GPIO controller interface. - - Required properties: - - - #gpio-cells : <2> - - compatible : should be "nintendo,hollywood-gpio" - - reg : should contain the IPC registers location and length - - gpio-controller + see Documentation/devicetree/bindings/gpio/nintendo,hollywood-gpio.txt 1.m) The control node From patchwork Mon Jan 22 05:04:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?J=2E_Neusch=C3=A4fer?= X-Patchwork-Id: 864148 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zPzyg4vHqz9sBd for ; Mon, 22 Jan 2018 16:10:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750952AbeAVFJv (ORCPT ); Mon, 22 Jan 2018 00:09:51 -0500 Received: from mout.gmx.net ([212.227.17.21]:51419 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750791AbeAVFJu (ORCPT ); Mon, 22 Jan 2018 00:09:50 -0500 Received: from localhost.localdomain ([88.153.6.51]) by mail.gmx.com (mrgmx101 [212.227.17.168]) with ESMTPSA (Nemesis) id 0LrrRi-1enz9F1sXW-013czh; Mon, 22 Jan 2018 06:04:39 +0100 From: =?utf-8?q?Jonathan_Neusch=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_Neusch=C3=A4fer?= , Rob Herring , Mark Rutland , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman Subject: [PATCH v2 5/6] powerpc: wii.dts: Add ngpios property Date: Mon, 22 Jan 2018 06:04:10 +0100 Message-Id: <20180122050411.32460-6-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 X-Provags-ID: V03:K0:0SmFcly0PElC3DyMFKiX2orhzgFhCzaez4KcxwFf2pK+zMXxvBc cIJtbBkmQLAOssJwJmpm28rFQOUKWGkzlWH78BmmCSsA+iAIEQy4lgOJSC5+PMQUD4om68Q 2uCxZMYyVHS4Z7mFp+Q0ypND3sJQJ5+t1QSBdBMoj1yxxwCFwFdw7q8a6zpWDddN+DzbdT1 2EK2Q3g/dqKv/AfqrXR1g== X-UI-Out-Filterresults: notjunk:1; V01:K0:bpDiy/aF+e0=:b8SZEyG8Tj4Df92/x80P9J T/cXdkD8FGPFH7yOatKdWOUFmyvCvFu2Vag8UUoxyOXFJAb/98kwIvlLjinqQ0++zGX7YT16h UKw7kbGsrp6MLJAZvM67pMaHnRjpqg7sRenS42zNW36u5hY7Ya9GxTAb1/Ck7VSRYJbrcvOxV tvS6wMQw7KFh/+8uyW5JcgGOuN3D+P8ublcICpEjXNxx19e7QSetUI4OdTQRhvh2THW4Z7G9C MC5t02cJYBV2ubp2NUAzEM5rZtSw6JGe9BrYPlJt7vVVq8pjU/R9WwICbC4F1/xQpuzsH1Yn5 oVSZwmsQdEnqDS3EvJHXVBBNIBlaPNe95UEFLx+81dJfWnO2sAYy9oQQBmF/PpgK5Bx08JW9n kAxL2ZreT1ZoBEv9VVdpzPi9CYz5eyl9AhkyLeV9YpLy1da/qZm+NBcGi6s3hOJgpy8f00aVW QsnJvefn6HvFQ2SVCKZtfarrZmFTi1kQ0aFCas0A6mrzH5lgWge6QondzXRnWdtsBwsNs+6/5 +JnnC/PHI8MCgDie4jeYC5nAgDW/Y0l03oShfspxqsCCnoSLqxYZhuAAnTDihc8F1flyUyJUv uKckI6tI2sbVKsfmKTqVqbu37DnrBvKMrDRTocR31/XFyBoen49h6nwJN8J4VSg1WZ96A3qH0 Fh4DpEb0zENbZD6hJn5lZiA4C6Q9hPZyIu8YsgeLHBQ25oZwvlzoze0jL2bJxxs5pytIHVJLD 3wBc4jb6Z2bIufiZ+SIkgIoXc9Aaf84nm/Fdu640gUuFxxkjwNL0ZVsH1JSnRj3pbzhchJF4/ QdJbBSUinpQI8oc1D9ztj6Y+uNYBP+THBvGWsOI9invlv4brTM= Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org The Hollywood GPIO controller supports 32 GPIOs, but on the Wii, only 24 are used. Signed-off-by: Jonathan Neuschäfer --- v2: - no change --- arch/powerpc/boot/dts/wii.dts | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/powerpc/boot/dts/wii.dts b/arch/powerpc/boot/dts/wii.dts index 40b324b6391e..7235e375919c 100644 --- a/arch/powerpc/boot/dts/wii.dts +++ b/arch/powerpc/boot/dts/wii.dts @@ -176,6 +176,7 @@ compatible = "nintendo,hollywood-gpio"; reg = <0x0d8000c0 0x40>; gpio-controller; + ngpios = <24>; /* * This is commented out while a standard binding From patchwork Mon Jan 22 05:04:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?J=2E_Neusch=C3=A4fer?= X-Patchwork-Id: 864147 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zPzy86J3tz9s82 for ; Mon, 22 Jan 2018 16:09:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750863AbeAVFJu (ORCPT ); Mon, 22 Jan 2018 00:09:50 -0500 Received: from mout.gmx.net ([212.227.17.22]:55950 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750759AbeAVFJt (ORCPT ); Mon, 22 Jan 2018 00:09:49 -0500 Received: from localhost.localdomain ([88.153.6.51]) by mail.gmx.com (mrgmx101 [212.227.17.168]) with ESMTPSA (Nemesis) id 0LguAU-1f7pM61Ada-00oJ4b; Mon, 22 Jan 2018 06:04:40 +0100 From: =?utf-8?q?Jonathan_Neusch=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_Neusch=C3=A4fer?= , Rob Herring , Mark Rutland , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman Subject: [PATCH v2 6/6] powerpc: wii.dts: Add GPIO line names Date: Mon, 22 Jan 2018 06:04:11 +0100 Message-Id: <20180122050411.32460-7-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 X-Provags-ID: V03:K0:WvuPvgKBfnySAxbXAbhIuv9leDNDanTr9LYGHWTfasMIGKgLwcH JVtskc3Lft8+KmmThKHoHIOue2yxaJOhHMDjIm88A7Wqoa1W8nYx24v42rxPBSIqla+4wFI 3j5l7DpUxYRVbcVfsiYLLVraFKRJrGB4DeMpknpd7E5qhy036zZXLFM08H+106n8AkLCzAD 9lLgFv2CICvGVxjxnd9RQ== X-UI-Out-Filterresults: notjunk:1; V01:K0:DH7A77W9Ptg=:w1rtNFhgZ0ge/U+pzRwifQ gvDsW/GVVMUdpHFq7BND4EAiLAc3h+WmgY5oaZBADQpe0rERStypdtnRP92NECLaKWSVWsCQZ K2okjGtyrSn4IWWgHc0sASdk1EwHUifR3JVqe3TSGiVdO8o+1hXQiKsBi5suCVUNag9fO90Ej Aea2FThWoLrJpxcvX7+uI/vOxupZ/bXtnwODioMCY27F25ff3aUvEcRwq++/WTm6ELw2kIqhJ kS/j86KS+L5QSYh9dA7XdnFRpvQ3ejGnT4flM8ACPFQKzQBjkB03tockMnl46nxHpw5CD6Leg OKLxgoq4rvMiTifwvA/eCHdaeS6jEmp5b9boxQfQweJtP91vW3duXoAC8rvI4PHFZnoctROm2 QlV/wfyG/DHWj+I4uVTkJu0oT0fObYgJhExcVNxD+z9Qnngxg0Llywxz19OVgxV+ufBUckZnB wz+/n9WYhiorJjWNc4o1hgLeQ1VMhBuitGZaCfvIf0825gC10RdK5cJtnOUUd7eML4h9v1fLO Flhlt/c4JhmWzCVOsvZjvs18BFP3lX/o0bxcvYHezak0JA/plaAKnreIAXcOoNWg+vCZriFQd XszVLxsimP//vCBplEU/J/wBFixDtmmoRqUxgLeLLyPwBO2kTbsf/ru+pqSpoqNxjrFnP/3yW Fm95yV4cv+nfUJrAhvMyy3QOsjO1wY+lwLhaldImand/wza+qANkN0rzBwy+sA5ZiwaNxQ39G FHWwBbhDQb8ztJpxe9AG+UwY8fBabTdrce9evcL3kG6Ix58e6qHZy2qCIFHmWg2sxK6cWOGe8 1cmUqLC8qXKKyB0snFmKuk8Ul3M5i3rda2NmQYnRNVgVEKW9+8= Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org These are the GPIO line names on a Nintendo Wii, as documented in: https://wiibrew.org/wiki/Hardware/Hollywood_GPIOs Signed-off-by: Jonathan Neuschäfer --- v2: - no change --- arch/powerpc/boot/dts/wii.dts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/powerpc/boot/dts/wii.dts b/arch/powerpc/boot/dts/wii.dts index 7235e375919c..07d5e84e98b1 100644 --- a/arch/powerpc/boot/dts/wii.dts +++ b/arch/powerpc/boot/dts/wii.dts @@ -178,6 +178,14 @@ gpio-controller; ngpios = <24>; + gpio-line-names = + "POWER", "SHUTDOWN", "FAN", "DC_DC", + "DI_SPIN", "SLOT_LED", "EJECT_BTN", "SLOT_IN", + "SENSOR_BAR", "DO_EJECT", "EEP_CS", "EEP_CLK", + "EEP_MOSI", "EEP_MISO", "AVE_SCL", "AVE_SDA", + "DEBUG0", "DEBUG1", "DEBUG2", "DEBUG3", + "DEBUG4", "DEBUG5", "DEBUG6", "DEBUG7"; + /* * This is commented out while a standard binding * for i2c over gpio is defined.