[PATCH v8 25/25] powerpc: Remove pmac_xpram_{read,write} functions
From: Finn Thain <hidden>
Date: 2018-12-26 00:44:33
Also in:
lkml
Subsystem:
char and misc drivers, linux for power macintosh, linux for powerpc (32-bit and 64-bit), the rest · Maintainers:
Arnd Bergmann, Greg Kroah-Hartman, Madhavan Srinivasan, Michael Ellerman, Linus Torvalds
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 <redacted>
Tested-by: Stan Johnson <redacted>
---
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 <linux/interrupt.h> #include <linux/hardirq.h> #include <linux/rtc.h> +#include <linux/nvram.h> #include <asm/sections.h> #include <asm/prom.h>
@@ -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