Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp5071532imu; Tue, 25 Dec 2018 17:08:22 -0800 (PST) X-Google-Smtp-Source: AFSGD/U+zSKKitQl3lr5A6F0DxBqChnikA10FdJ4WSsT/lVeQWy6uvi/FrpuoBFClVcziYZvOQUX X-Received: by 2002:a62:4156:: with SMTP id o83mr18283042pfa.72.1545786502650; Tue, 25 Dec 2018 17:08:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545786502; cv=none; d=google.com; s=arc-20160816; b=dIBtcJCeh/4qFTlbZSVS/N9oAHF/R3m+42ROZ7j8f1VvFsXqm3y1vqh/jmCS84+qvg WoVBfb1qjMT5uEg6IYGzkTJXQlanvUGhGxgWfMavVXfTKGNhotE7QmpU8676huY0WVne LwEiZ9+U3owH47eDp1zbu5Q3ELjnJP3ChRtHmvSd9W6V4D8MCvBl1jvkZhVL7wwocUxS 8gVpzlOkdDyaHiy9CnMqfFC6G48ePh3w3N6jA7RoLm2FBszZinva+LuGXNa4TgzpUBLQ WUhxMVRK/VEK060Yqee/NpBveOoEHAoVgb2lCf/9/uAJ8EhKW1Gy8IBCFK3l7kMIVd2A lXFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:subject:from:references:in-reply-to :message-id:cc:to; bh=A1u7ayRvUs4zwSqgwngcxwnEMNg5G+E04jEa8+xW5Zo=; b=zf+ru+vZewNuHEAxVItBfOs3AnttOj3mdTVEWXSncQTjZXs6L702fQTjJlG2kRzUGC 8fETBQtcdLB4tiyJF8YZM4vlaqJcxkHqaOMMhhyoNMuEi9USYPzo9Is/szh2VxQdLDOS EFEz+r4GSL1NZCryH0raBbLTQYNwkzCCt4Z3WZUg70F0Lf2pbP239eP47OlMnSVcKKlc tnOcEO0bdClruvkWVsyKhJGAkjhRSBW88dqYTbNTb+Kf4GnFeEtpnf9M/0V8f/t87Vzj exl3lNS4pY4rZe3Js8I3d1lbAlPguIB8XhoSJQ6piu1boTBiSqnbytLgZ8eO5zWpbibJ Xw8A== 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 h75si32665087pfj.257.2018.12.25.17.08.06; Tue, 25 Dec 2018 17:08:22 -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 S1728666AbeLZAob (ORCPT + 99 others); Tue, 25 Dec 2018 19:44:31 -0500 Received: from kvm5.telegraphics.com.au ([98.124.60.144]:57386 "EHLO kvm5.telegraphics.com.au" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725932AbeLZAoC (ORCPT ); Tue, 25 Dec 2018 19:44:02 -0500 Received: by kvm5.telegraphics.com.au (Postfix, from userid 502) id 320E129532; Tue, 25 Dec 2018 19:43:57 -0500 (EST) To: Arnd Bergmann , Greg Kroah-Hartman , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman Cc: linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linuxppc-dev@lists.ozlabs.org Message-Id: <0949c1b7bd8b9d0034e77601a9af73c712d26d4a.1545784679.git.fthain@telegraphics.com.au> In-Reply-To: References: From: Finn Thain Subject: [PATCH v8 25/25] powerpc: Remove pmac_xpram_{read,write} functions Date: Wed, 26 Dec 2018 11:37:59 +1100 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The arch_nvram_ops methods provide a uniform API to replace the nvram_{read,write}_byte exports and pmac_xpram_{read,write} functions. The latter API gets removed in this patch. To make that possible, add a get_partition() method to the nvram_ops struct and call it from pmac_time_init(). pmac_xpram_read() becomes unused as pmac_time_init() is converted to the arch_nvram_ops API. pmac_xpram_write() was already unused. As a bonus, drivers/char/nvram.c benefits from the API conversion by the removal of an #ifdef. Signed-off-by: Finn Thain Tested-by: Stan Johnson --- arch/powerpc/include/asm/nvram.h | 4 ---- arch/powerpc/kernel/nvram_64.c | 3 +++ arch/powerpc/kernel/setup_32.c | 3 +++ arch/powerpc/platforms/powermac/nvram.c | 28 +++---------------------- arch/powerpc/platforms/powermac/time.c | 17 +++++++++++---- drivers/char/nvram.c | 6 ++---- include/linux/nvram.h | 1 + 7 files changed, 25 insertions(+), 37 deletions(-) diff --git a/arch/powerpc/include/asm/nvram.h b/arch/powerpc/include/asm/nvram.h index 629a5cdcc865..a7916b1c3f3a 100644 --- a/arch/powerpc/include/asm/nvram.h +++ b/arch/powerpc/include/asm/nvram.h @@ -74,10 +74,6 @@ extern loff_t nvram_find_partition(const char *name, int sig, int *out_size); /* Return partition offset in nvram */ extern int pmac_get_partition(int partition); -/* Direct access to XPRAM on PowerMacs */ -extern u8 pmac_xpram_read(int xpaddr); -extern void pmac_xpram_write(int xpaddr, u8 data); - /* Initialize NVRAM OS partition */ extern int __init nvram_init_os_partition(struct nvram_os_partition *part); diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c index 6d0461c02e0f..2190ce75467d 100644 --- a/arch/powerpc/kernel/nvram_64.c +++ b/arch/powerpc/kernel/nvram_64.c @@ -1093,6 +1093,9 @@ const struct nvram_ops arch_nvram_ops = { .write = ppc_nvram_write, .get_size = ppc_nvram_get_size, .sync = ppc_nvram_sync, +#ifdef CONFIG_PPC_PMAC + .get_partition = pmac_get_partition, +#endif }; EXPORT_SYMBOL(arch_nvram_ops); diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c index 96782abb0c41..a76cfb125eb1 100644 --- a/arch/powerpc/kernel/setup_32.c +++ b/arch/powerpc/kernel/setup_32.c @@ -184,6 +184,9 @@ const struct nvram_ops arch_nvram_ops = { .write_byte = ppc_nvram_write_byte, .get_size = ppc_nvram_get_size, .sync = ppc_nvram_sync, +#ifdef CONFIG_PPC_PMAC + .get_partition = pmac_get_partition, +#endif }; EXPORT_SYMBOL(arch_nvram_ops); diff --git a/arch/powerpc/platforms/powermac/nvram.c b/arch/powerpc/platforms/powermac/nvram.c index 9360cdc408c1..38c5cdd44d7b 100644 --- a/arch/powerpc/platforms/powermac/nvram.c +++ b/arch/powerpc/platforms/powermac/nvram.c @@ -629,29 +629,7 @@ int __init pmac_nvram_init(void) int pmac_get_partition(int partition) { - return nvram_partitions[partition]; + if (machine_is(powermac)) + return nvram_partitions[partition]; + return -1; } - -u8 pmac_xpram_read(int xpaddr) -{ - int offset = pmac_get_partition(pmac_nvram_XPRAM); - - if (offset < 0 || xpaddr < 0 || xpaddr > 0x100) - return 0xff; - - return ppc_md.nvram_read_val(xpaddr + offset); -} - -void pmac_xpram_write(int xpaddr, u8 data) -{ - int offset = pmac_get_partition(pmac_nvram_XPRAM); - - if (offset < 0 || xpaddr < 0 || xpaddr > 0x100) - return; - - ppc_md.nvram_write_val(xpaddr + offset, data); -} - -EXPORT_SYMBOL(pmac_get_partition); -EXPORT_SYMBOL(pmac_xpram_read); -EXPORT_SYMBOL(pmac_xpram_write); diff --git a/arch/powerpc/platforms/powermac/time.c b/arch/powerpc/platforms/powermac/time.c index b36ddee17c87..7df08c7d348f 100644 --- a/arch/powerpc/platforms/powermac/time.c +++ b/arch/powerpc/platforms/powermac/time.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -70,13 +71,21 @@ long __init pmac_time_init(void) s32 delta = 0; #if defined(CONFIG_NVRAM) && defined(CONFIG_PPC32) int dst; + int offset = arch_nvram_ops.get_partition(pmac_nvram_XPRAM); - delta = ((s32)pmac_xpram_read(PMAC_XPRAM_MACHINE_LOC + 0x9)) << 16; - delta |= ((s32)pmac_xpram_read(PMAC_XPRAM_MACHINE_LOC + 0xa)) << 8; - delta |= pmac_xpram_read(PMAC_XPRAM_MACHINE_LOC + 0xb); + if (offset < 0) + return 0; + + delta = arch_nvram_ops.read_byte(offset + PMAC_XPRAM_MACHINE_LOC + 9); + delta <<= 8; + delta |= arch_nvram_ops.read_byte(offset + PMAC_XPRAM_MACHINE_LOC + 10); + delta <<= 8; + delta |= arch_nvram_ops.read_byte(offset + PMAC_XPRAM_MACHINE_LOC + 11); + if (delta & 0x00800000UL) delta |= 0xFF000000UL; - dst = ((pmac_xpram_read(PMAC_XPRAM_MACHINE_LOC + 0x8) & 0x80) != 0); + dst = arch_nvram_ops.read_byte(offset + PMAC_XPRAM_MACHINE_LOC + 8); + dst &= 0x80; printk("GMT Delta read from XPRAM: %d minutes, DST: %s\n", delta/60, dst ? "on" : "off"); #endif diff --git a/drivers/char/nvram.c b/drivers/char/nvram.c index 8cbfed86ec8d..e19d9be214cf 100644 --- a/drivers/char/nvram.c +++ b/drivers/char/nvram.c @@ -324,8 +324,7 @@ static long nvram_misc_ioctl(struct file *file, unsigned int cmd, /* fall through */ case IOC_NVRAM_GET_OFFSET: ret = -EINVAL; -#ifdef CONFIG_PPC_PMAC - if (machine_is(powermac)) { + if (arch_nvram_ops.get_partition != NULL) { int part, offset; if (copy_from_user(&part, (void __user *)arg, @@ -333,7 +332,7 @@ static long nvram_misc_ioctl(struct file *file, unsigned int cmd, return -EFAULT; if (part < pmac_nvram_OF || part > pmac_nvram_NR) return -EINVAL; - offset = pmac_get_partition(part); + offset = arch_nvram_ops.get_partition(part); if (offset < 0) return -EINVAL; if (copy_to_user((void __user *)arg, @@ -341,7 +340,6 @@ static long nvram_misc_ioctl(struct file *file, unsigned int cmd, return -EFAULT; ret = 0; } -#endif break; case IOC_NVRAM_SYNC: if (arch_nvram_ops.sync != NULL) { diff --git a/include/linux/nvram.h b/include/linux/nvram.h index 251472f1b2bd..4ccb491d9871 100644 --- a/include/linux/nvram.h +++ b/include/linux/nvram.h @@ -12,6 +12,7 @@ struct nvram_ops { ssize_t (*get_size)(void); #ifdef CONFIG_PPC long (*sync)(void); + int (*get_partition)(int); #else long (*set_checksum)(void); long (*initialize)(void); -- 2.19.2