[RFC PATCH v1 09/11] powerpc/platforms: Use ppc_md. helpers

From: Christophe Leroy
Date: Fri Sep 03 2021 - 07:19:20 EST


Instead of playing directly with ppc_md. structure fields,
use the newly defined helpers.

Signed-off-by: Christophe Leroy <christophe.leroy@xxxxxxxxxx>
---
arch/powerpc/include/asm/archrandom.h | 4 +-
arch/powerpc/include/asm/iommu.h | 3 +-
arch/powerpc/include/asm/machdep.h | 3 +-
arch/powerpc/include/asm/pci.h | 4 +-
arch/powerpc/include/asm/pmac_feature.h | 4 +-
arch/powerpc/kernel/dawr.c | 4 +-
arch/powerpc/kernel/dma-mask.c | 3 +-
arch/powerpc/kernel/epapr_paravirt.c | 2 +-
arch/powerpc/kernel/idle.c | 6 +--
arch/powerpc/kernel/irq.c | 5 +--
arch/powerpc/kernel/mce.c | 7 ++-
arch/powerpc/kernel/mce_power.c | 4 +-
arch/powerpc/kernel/nvram_64.c | 18 ++++----
arch/powerpc/kernel/of_platform.c | 4 +-
arch/powerpc/kernel/pci-common.c | 41 +++++++----------
arch/powerpc/kernel/pci_32.c | 6 +--
arch/powerpc/kernel/pci_64.c | 5 +--
arch/powerpc/kernel/process.c | 4 +-
arch/powerpc/kernel/setup-common.c | 26 +++++------
arch/powerpc/kernel/setup_32.c | 12 +++--
arch/powerpc/kernel/setup_64.c | 4 +-
arch/powerpc/kernel/sysfs.c | 11 +++--
arch/powerpc/kernel/time.c | 32 +++++++-------
arch/powerpc/kernel/traps.c | 11 +++--
arch/powerpc/kexec/core.c | 4 +-
arch/powerpc/kexec/core_64.c | 9 ++--
arch/powerpc/kexec/crash.c | 6 +--
arch/powerpc/kvm/book3s_hv_ras.c | 3 +-
arch/powerpc/mm/book3s32/mmu.c | 10 ++---
arch/powerpc/mm/book3s64/radix_pgtable.c | 2 +-
arch/powerpc/mm/init_32.c | 12 ++---
arch/powerpc/mm/mem.c | 6 +--
arch/powerpc/platforms/44x/idle.c | 4 +-
arch/powerpc/platforms/44x/iss4xx.c | 4 +-
arch/powerpc/platforms/44x/ppc476.c | 6 +--
arch/powerpc/platforms/4xx/cpm.c | 2 +-
arch/powerpc/platforms/52xx/efika.c | 3 +-
arch/powerpc/platforms/52xx/lite5200.c | 3 +-
arch/powerpc/platforms/52xx/media5200.c | 3 +-
arch/powerpc/platforms/52xx/mpc5200_simple.c | 3 +-
arch/powerpc/platforms/52xx/mpc52xx_pci.c | 10 ++---
arch/powerpc/platforms/82xx/ep8248e.c | 6 +--
arch/powerpc/platforms/82xx/km82xx.c | 6 +--
arch/powerpc/platforms/82xx/mpc8272_ads.c | 6 +--
arch/powerpc/platforms/82xx/pq2.c | 2 +-
arch/powerpc/platforms/82xx/pq2fads.c | 6 +--
arch/powerpc/platforms/83xx/misc.c | 3 +-
arch/powerpc/platforms/85xx/bsc913x_qds.c | 3 +-
arch/powerpc/platforms/85xx/bsc913x_rdb.c | 3 +-
arch/powerpc/platforms/85xx/c293pcie.c | 3 +-
arch/powerpc/platforms/85xx/corenet_generic.c | 8 ++--
arch/powerpc/platforms/85xx/ge_imp3a.c | 3 +-
arch/powerpc/platforms/85xx/ksi8560.c | 3 +-
arch/powerpc/platforms/85xx/mpc8536_ds.c | 3 +-
arch/powerpc/platforms/85xx/mpc85xx_ads.c | 3 +-
arch/powerpc/platforms/85xx/mpc85xx_cds.c | 11 +++--
arch/powerpc/platforms/85xx/mpc85xx_ds.c | 5 +--
arch/powerpc/platforms/85xx/mpc85xx_mds.c | 3 +-
arch/powerpc/platforms/85xx/mpc85xx_rdb.c | 3 +-
arch/powerpc/platforms/85xx/mvme2500.c | 3 +-
arch/powerpc/platforms/85xx/p1010rdb.c | 3 +-
arch/powerpc/platforms/85xx/p1022_ds.c | 3 +-
arch/powerpc/platforms/85xx/p1022_rdk.c | 3 +-
arch/powerpc/platforms/85xx/p1023_rdb.c | 3 +-
arch/powerpc/platforms/85xx/ppa8548.c | 3 +-
arch/powerpc/platforms/85xx/qemu_e500.c | 2 +-
arch/powerpc/platforms/85xx/sgy_cts1000.c | 4 +-
arch/powerpc/platforms/85xx/smp.c | 7 ++-
arch/powerpc/platforms/85xx/socrates.c | 3 +-
arch/powerpc/platforms/85xx/stx_gp3.c | 3 +-
arch/powerpc/platforms/85xx/tqm85xx.c | 3 +-
arch/powerpc/platforms/85xx/twr_p102x.c | 3 +-
arch/powerpc/platforms/86xx/mpc8610_hpcd.c | 3 +-
arch/powerpc/platforms/86xx/mpc86xx_hpcn.c | 5 +--
arch/powerpc/platforms/86xx/mvme7100.c | 3 +-
arch/powerpc/platforms/amigaone/setup.c | 5 +--
arch/powerpc/platforms/cell/interrupt.c | 2 +-
arch/powerpc/platforms/cell/pervasive.c | 4 +-
arch/powerpc/platforms/cell/ras.c | 2 +-
arch/powerpc/platforms/chrp/nvram.c | 6 +--
arch/powerpc/platforms/chrp/setup.c | 23 +++++-----
arch/powerpc/platforms/embedded6xx/holly.c | 8 ++--
.../platforms/embedded6xx/mpc7448_hpc2.c | 9 ++--
arch/powerpc/platforms/embedded6xx/mvme5100.c | 3 +-
arch/powerpc/platforms/embedded6xx/wii.c | 3 +-
arch/powerpc/platforms/maple/pci.c | 2 +-
arch/powerpc/platforms/maple/setup.c | 6 +--
arch/powerpc/platforms/microwatt/rng.c | 2 +-
arch/powerpc/platforms/pasemi/idle.c | 4 +-
arch/powerpc/platforms/powermac/nvram.c | 44 +++++++++----------
arch/powerpc/platforms/powermac/pci.c | 2 +-
arch/powerpc/platforms/powermac/pic.c | 4 +-
arch/powerpc/platforms/powermac/smp.c | 18 ++++----
arch/powerpc/platforms/powernv/eeh-powernv.c | 2 +-
arch/powerpc/platforms/powernv/idle.c | 4 +-
arch/powerpc/platforms/powernv/opal-nvram.c | 6 +--
arch/powerpc/platforms/powernv/pci-ioda.c | 12 ++---
arch/powerpc/platforms/powernv/rng.c | 4 +-
arch/powerpc/platforms/powernv/setup.c | 18 ++++----
arch/powerpc/platforms/powernv/smp.c | 2 +-
arch/powerpc/platforms/ps3/interrupt.c | 2 +-
arch/powerpc/platforms/ps3/setup.c | 2 +-
arch/powerpc/platforms/pseries/eeh_pseries.c | 2 +-
arch/powerpc/platforms/pseries/hotplug-cpu.c | 4 +-
arch/powerpc/platforms/pseries/msi.c | 4 +-
arch/powerpc/platforms/pseries/nvram.c | 8 ++--
arch/powerpc/platforms/pseries/pci.c | 4 +-
arch/powerpc/platforms/pseries/rng.c | 2 +-
arch/powerpc/platforms/pseries/setup.c | 31 ++++++-------
arch/powerpc/sysdev/dart_iommu.c | 2 +-
arch/powerpc/sysdev/fsl_pci.c | 6 +--
arch/powerpc/sysdev/indirect_pci.c | 8 ++--
arch/powerpc/sysdev/mmio_nvram.c | 10 ++---
arch/powerpc/sysdev/mpic.c | 2 +-
arch/powerpc/sysdev/tsi108_pci.c | 8 ++--
arch/powerpc/sysdev/xics/xics-common.c | 2 +-
arch/powerpc/sysdev/xive/common.c | 2 +-
arch/powerpc/xmon/xmon.c | 4 +-
drivers/ata/pata_macio.c | 10 ++---
drivers/char/nvram.c | 4 +-
drivers/macintosh/via-pmu.c | 4 +-
include/linux/nvram.h | 19 ++++----
sound/ppc/pmac.c | 3 +-
123 files changed, 347 insertions(+), 438 deletions(-)

diff --git a/arch/powerpc/include/asm/archrandom.h b/arch/powerpc/include/asm/archrandom.h
index 9a53e29680f4..4f858298c010 100644
--- a/arch/powerpc/include/asm/archrandom.h
+++ b/arch/powerpc/include/asm/archrandom.h
@@ -18,8 +18,8 @@ static inline bool __must_check arch_get_random_int(unsigned int *v)

static inline bool __must_check arch_get_random_seed_long(unsigned long *v)
{
- if (ppc_md.get_random_seed)
- return ppc_md.get_random_seed(v);
+ if (ppc_md_has(get_random_seed))
+ return ppc_md_call(get_random_seed)(v);

return false;
}
diff --git a/arch/powerpc/include/asm/iommu.h b/arch/powerpc/include/asm/iommu.h
index c361212ac160..c4d21a5db5db 100644
--- a/arch/powerpc/include/asm/iommu.h
+++ b/arch/powerpc/include/asm/iommu.h
@@ -282,8 +282,7 @@ extern void iommu_init_early_pasemi(void);
#if defined(CONFIG_PPC64) && defined(CONFIG_PM)
static inline void iommu_restore(void)
{
- if (ppc_md.iommu_restore)
- ppc_md.iommu_restore();
+ ppc_md_call_cond(iommu_restore)();
}
#endif

diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
index 51949ab0abfe..ed5a1b5be7b5 100644
--- a/arch/powerpc/include/asm/machdep.h
+++ b/arch/powerpc/include/asm/machdep.h
@@ -237,8 +237,7 @@ extern struct machdep_calls *machine_id;

static inline void log_error(char *buf, unsigned int err_type, int fatal)
{
- if (ppc_md.log_error)
- ppc_md.log_error(buf, err_type, fatal);
+ ppc_md_call_cond(log_error)(buf, err_type, fatal);
}

#define __define_machine_initcall(mach, fn, id) \
diff --git a/arch/powerpc/include/asm/pci.h b/arch/powerpc/include/asm/pci.h
index d1f53260725c..d77f8793d30e 100644
--- a/arch/powerpc/include/asm/pci.h
+++ b/arch/powerpc/include/asm/pci.h
@@ -42,8 +42,8 @@
#define HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ
static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
{
- if (ppc_md.pci_get_legacy_ide_irq)
- return ppc_md.pci_get_legacy_ide_irq(dev, channel);
+ if (ppc_md_has(pci_get_legacy_ide_irq))
+ return ppc_md_call(pci_get_legacy_ide_irq)(dev, channel);
return channel ? 15 : 14;
}

diff --git a/arch/powerpc/include/asm/pmac_feature.h b/arch/powerpc/include/asm/pmac_feature.h
index e08e829261b6..c07b108262a4 100644
--- a/arch/powerpc/include/asm/pmac_feature.h
+++ b/arch/powerpc/include/asm/pmac_feature.h
@@ -146,9 +146,9 @@ struct device_node;
static inline long pmac_call_feature(int selector, struct device_node* node,
long param, long value)
{
- if (!ppc_md.feature_call || !machine_is(powermac))
+ if (!ppc_md_has(feature_call) || !machine_is(powermac))
return -ENODEV;
- return ppc_md.feature_call(selector, node, param, value);
+ return ppc_md_call(feature_call)(selector, node, param, value);
}

/* PMAC_FTR_SERIAL_ENABLE (struct device_node* node, int param, int value)
diff --git a/arch/powerpc/kernel/dawr.c b/arch/powerpc/kernel/dawr.c
index 64e423d2fe0f..decb9786404f 100644
--- a/arch/powerpc/kernel/dawr.c
+++ b/arch/powerpc/kernel/dawr.c
@@ -35,8 +35,8 @@ int set_dawr(int nr, struct arch_hw_breakpoint *brk)
mrd = ((brk->hw_len + 7) >> 3) - 1;
dawrx |= (mrd & 0x3f) << (63 - 53);

- if (ppc_md.set_dawr)
- return ppc_md.set_dawr(nr, dawr, dawrx);
+ if (ppc_md_has(set_dawr))
+ return ppc_md_call(set_dawr)(nr, dawr, dawrx);

if (nr == 0) {
mtspr(SPRN_DAWR0, dawr);
diff --git a/arch/powerpc/kernel/dma-mask.c b/arch/powerpc/kernel/dma-mask.c
index ffbbbc432612..19152c085e06 100644
--- a/arch/powerpc/kernel/dma-mask.c
+++ b/arch/powerpc/kernel/dma-mask.c
@@ -6,7 +6,6 @@

void arch_dma_set_mask(struct device *dev, u64 dma_mask)
{
- if (ppc_md.dma_set_mask)
- ppc_md.dma_set_mask(dev, dma_mask);
+ ppc_md_call_cond(dma_set_mask)(dev, dma_mask);
}
EXPORT_SYMBOL(arch_dma_set_mask);
diff --git a/arch/powerpc/kernel/epapr_paravirt.c b/arch/powerpc/kernel/epapr_paravirt.c
index 93b0f3ec8fb0..785f82df0cd5 100644
--- a/arch/powerpc/kernel/epapr_paravirt.c
+++ b/arch/powerpc/kernel/epapr_paravirt.c
@@ -65,7 +65,7 @@ static int __init epapr_idle_init(void)
{
#if !defined(CONFIG_64BIT) || defined(CONFIG_PPC_BOOK3E_64)
if (epapr_has_idle)
- ppc_md.power_save = epapr_ev_idle;
+ ppc_md_update(power_save, epapr_ev_idle);
#endif

return 0;
diff --git a/arch/powerpc/kernel/idle.c b/arch/powerpc/kernel/idle.c
index 1f835539fda4..a131d5caa288 100644
--- a/arch/powerpc/kernel/idle.c
+++ b/arch/powerpc/kernel/idle.c
@@ -35,7 +35,7 @@ EXPORT_SYMBOL(cpuidle_disable);

static int __init powersave_off(char *arg)
{
- ppc_md.power_save = NULL;
+ ppc_md_update(power_save, NULL);
cpuidle_disable = IDLE_POWERSAVE_OFF;
return 0;
}
@@ -45,8 +45,8 @@ void arch_cpu_idle(void)
{
ppc64_runlatch_off();

- if (ppc_md.power_save) {
- ppc_md.power_save();
+ if (ppc_md_has(power_save)) {
+ ppc_md_call(power_save)();
/*
* Some power_save functions return with
* interrupts enabled, some don't.
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 551b653228c4..a4741b4498c3 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -736,7 +736,7 @@ void __do_irq(struct pt_regs *regs)
*
* This will typically lower the interrupt line to the CPU
*/
- irq = ppc_md.get_irq();
+ irq = ppc_md_call(get_irq)();

/* We can hard enable interrupts now to allow perf interrupts */
may_hard_irq_enable();
@@ -801,8 +801,7 @@ void __init init_IRQ(void)
if (IS_ENABLED(CONFIG_VMAP_STACK))
vmap_irqstack_init();

- if (ppc_md.init_IRQ)
- ppc_md.init_IRQ();
+ ppc_md_call_cond(init_IRQ)();
}

#if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
diff --git a/arch/powerpc/kernel/mce.c b/arch/powerpc/kernel/mce.c
index 47a683cd00d2..686f5c00f4c6 100644
--- a/arch/powerpc/kernel/mce.c
+++ b/arch/powerpc/kernel/mce.c
@@ -595,8 +595,8 @@ DEFINE_INTERRUPT_HANDLER_NMI(machine_check_early)
/*
* See if platform is capable of handling machine check.
*/
- if (ppc_md.machine_check_early)
- handled = ppc_md.machine_check_early(regs);
+ if (ppc_md_has(machine_check_early))
+ handled = ppc_md_call(machine_check_early)(regs);

return handled;
}
@@ -721,8 +721,7 @@ DEFINE_INTERRUPT_HANDLER_NMI(hmi_exception_realmode)

wait_for_subcore_guest_exit();

- if (ppc_md.hmi_exception_early)
- ppc_md.hmi_exception_early(regs);
+ ppc_md_call_cond(hmi_exception_early)(regs);

wait_for_tb_resync();

diff --git a/arch/powerpc/kernel/mce_power.c b/arch/powerpc/kernel/mce_power.c
index c2f55fe7092d..5cc0eee69e67 100644
--- a/arch/powerpc/kernel/mce_power.c
+++ b/arch/powerpc/kernel/mce_power.c
@@ -685,8 +685,8 @@ static long mce_handle_ue_error(struct pt_regs *regs,
* different way and hence we can recover from this MC.
*/

- if (ppc_md.mce_check_early_recovery) {
- if (ppc_md.mce_check_early_recovery(regs))
+ if (ppc_md_has(mce_check_early_recovery)) {
+ if (ppc_md_call(mce_check_early_recovery)(regs))
return 1;
}

diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c
index 3c8d9bbb51cf..80ce34e4b1de 100644
--- a/arch/powerpc/kernel/nvram_64.c
+++ b/arch/powerpc/kernel/nvram_64.c
@@ -197,13 +197,13 @@ int nvram_write_os_partition(struct nvram_os_partition *part,

tmp_index = part->index;

- rc = ppc_md.nvram_write((char *)&info, sizeof(info), &tmp_index);
+ rc = ppc_md_call(nvram_write)((char *)&info, sizeof(info), &tmp_index);
if (rc <= 0) {
pr_err("%s: Failed nvram_write (%d)\n", __func__, rc);
return rc;
}

- rc = ppc_md.nvram_write(buff, length, &tmp_index);
+ rc = ppc_md_call(nvram_write)(buff, length, &tmp_index);
if (rc <= 0) {
pr_err("%s: Failed nvram_write (%d)\n", __func__, rc);
return rc;
@@ -233,14 +233,14 @@ int nvram_read_partition(struct nvram_os_partition *part, char *buff,
tmp_index = part->index;

if (part->os_partition) {
- rc = ppc_md.nvram_read((char *)&info, sizeof(info), &tmp_index);
+ rc = ppc_md_call(nvram_read)((char *)&info, sizeof(info), &tmp_index);
if (rc <= 0) {
pr_err("%s: Failed nvram_read (%d)\n", __func__, rc);
return rc;
}
}

- rc = ppc_md.nvram_read(buff, length, &tmp_index);
+ rc = ppc_md_call(nvram_read)(buff, length, &tmp_index);
if (rc <= 0) {
pr_err("%s: Failed nvram_read (%d)\n", __func__, rc);
return rc;
@@ -731,7 +731,7 @@ static int __init nvram_write_header(struct nvram_partition * part)
phead.length = cpu_to_be16(phead.length);

tmp_index = part->index;
- rc = ppc_md.nvram_write((char *)&phead, NVRAM_HEADER_LEN, &tmp_index);
+ rc = ppc_md_call(nvram_write)((char *)&phead, NVRAM_HEADER_LEN, &tmp_index);

return rc;
}
@@ -930,7 +930,7 @@ loff_t __init nvram_create_partition(const char *name, int sig,
for (tmp_index = new_part->index + NVRAM_HEADER_LEN;
tmp_index < ((size - 1) * NVRAM_BLOCK_LEN);
tmp_index += NVRAM_BLOCK_LEN) {
- rc = ppc_md.nvram_write(nv_init_vals, NVRAM_BLOCK_LEN, &tmp_index);
+ rc = ppc_md_call(nvram_write)(nv_init_vals, NVRAM_BLOCK_LEN, &tmp_index);
if (rc <= 0) {
pr_err("%s: nvram_write failed (%d)\n",
__func__, rc);
@@ -991,9 +991,9 @@ int __init nvram_scan_partitions(void)
int total_size;
int err;

- if (ppc_md.nvram_size == NULL || ppc_md.nvram_size() <= 0)
+ if (!ppc_md_has(nvram_size) || ppc_md_call(nvram_size)() <= 0)
return -ENODEV;
- total_size = ppc_md.nvram_size();
+ total_size = ppc_md_call(nvram_size)();

header = kmalloc(NVRAM_HEADER_LEN, GFP_KERNEL);
if (!header) {
@@ -1003,7 +1003,7 @@ int __init nvram_scan_partitions(void)

while (cur_index < total_size) {

- err = ppc_md.nvram_read(header, NVRAM_HEADER_LEN, &cur_index);
+ err = ppc_md_call(nvram_read)(header, NVRAM_HEADER_LEN, &cur_index);
if (err != NVRAM_HEADER_LEN) {
printk(KERN_ERR "nvram_scan_partitions: Error parsing "
"nvram partitions\n");
diff --git a/arch/powerpc/kernel/of_platform.c b/arch/powerpc/kernel/of_platform.c
index f89376ff633e..96de8700d3e9 100644
--- a/arch/powerpc/kernel/of_platform.c
+++ b/arch/powerpc/kernel/of_platform.c
@@ -37,7 +37,7 @@ static int of_pci_phb_probe(struct platform_device *dev)
struct pci_controller *phb;

/* Check if we can do that ... */
- if (ppc_md.pci_setup_phb == NULL)
+ if (!ppc_md_has(pci_setup_phb))
return -ENODEV;

pr_info("Setting up PCI bus %pOF\n", dev->dev.of_node);
@@ -51,7 +51,7 @@ static int of_pci_phb_probe(struct platform_device *dev)
phb->parent = &dev->dev;

/* Setup the PHB using arch provided callback */
- if (ppc_md.pci_setup_phb(phb)) {
+ if (ppc_md_call(pci_setup_phb)(phb)) {
pcibios_free_controller(phb);
return -ENODEV;
}
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
index c3573430919d..a4d957dc80c0 100644
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c
@@ -229,8 +229,8 @@ void pcibios_reset_secondary_bus(struct pci_dev *dev)

resource_size_t pcibios_default_alignment(void)
{
- if (ppc_md.pcibios_default_alignment)
- return ppc_md.pcibios_default_alignment();
+ if (ppc_md_has(pcibios_default_alignment))
+ return ppc_md_call(pcibios_default_alignment)();

return 0;
}
@@ -238,24 +238,24 @@ resource_size_t pcibios_default_alignment(void)
#ifdef CONFIG_PCI_IOV
resource_size_t pcibios_iov_resource_alignment(struct pci_dev *pdev, int resno)
{
- if (ppc_md.pcibios_iov_resource_alignment)
- return ppc_md.pcibios_iov_resource_alignment(pdev, resno);
+ if (ppc_md_has(pcibios_iov_resource_alignment))
+ return ppc_md_call(pcibios_iov_resource_alignment)(pdev, resno);

return pci_iov_resource_size(pdev, resno);
}

int pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
{
- if (ppc_md.pcibios_sriov_enable)
- return ppc_md.pcibios_sriov_enable(pdev, num_vfs);
+ if (ppc_md_has(pcibios_sriov_enable))
+ return ppc_md_call(pcibios_sriov_enable)(pdev, num_vfs);

return 0;
}

int pcibios_sriov_disable(struct pci_dev *pdev)
{
- if (ppc_md.pcibios_sriov_disable)
- return ppc_md.pcibios_sriov_disable(pdev);
+ if (ppc_md_has(pcibios_sriov_disable))
+ return ppc_md_call(pcibios_sriov_disable)(pdev);

return 0;
}
@@ -850,8 +850,8 @@ int pci_proc_domain(struct pci_bus *bus)

int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
{
- if (ppc_md.pcibios_root_bridge_prepare)
- return ppc_md.pcibios_root_bridge_prepare(bridge);
+ if (ppc_md_has(pcibios_root_bridge_prepare))
+ return ppc_md_call(pcibios_root_bridge_prepare)(bridge);

return 0;
}
@@ -901,8 +901,7 @@ static void pcibios_fixup_resources(struct pci_dev *dev)
}

/* Call machine specific resource fixup */
- if (ppc_md.pcibios_fixup_resources)
- ppc_md.pcibios_fixup_resources(dev);
+ ppc_md_call_cond(pcibios_fixup_resources)(dev);
}
DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pcibios_fixup_resources);

@@ -1024,8 +1023,7 @@ void pcibios_setup_bus_self(struct pci_bus *bus)
/* Platform specific bus fixups. This is currently only used
* by fsl_pci and I'm hoping to get rid of it at some point
*/
- if (ppc_md.pcibios_fixup_bus)
- ppc_md.pcibios_fixup_bus(bus);
+ ppc_md_call_cond(pcibios_fixup_bus)(bus);

/* Setup bus DMA mappings */
phb = pci_bus_to_host(bus);
@@ -1052,11 +1050,9 @@ void pcibios_bus_add_device(struct pci_dev *dev)

/* Read default IRQs and fixup if necessary */
pci_read_irq_line(dev);
- if (ppc_md.pci_irq_fixup)
- ppc_md.pci_irq_fixup(dev);
+ ppc_md_call_cond(pci_irq_fixup)(dev);

- if (ppc_md.pcibios_bus_add_device)
- ppc_md.pcibios_bus_add_device(dev);
+ ppc_md_call_cond(pcibios_bus_add_device)(dev);
}

int pcibios_add_device(struct pci_dev *dev)
@@ -1064,8 +1060,7 @@ int pcibios_add_device(struct pci_dev *dev)
struct irq_domain *d;

#ifdef CONFIG_PCI_IOV
- if (ppc_md.pcibios_fixup_sriov)
- ppc_md.pcibios_fixup_sriov(dev);
+ ppc_md_call_cond(pcibios_fixup_sriov)(dev);
#endif /* CONFIG_PCI_IOV */

d = dev_get_msi_domain(&dev->bus->dev);
@@ -1673,8 +1668,7 @@ void pcibios_scan_phb(struct pci_controller *hose)
/* Platform gets a chance to do some global fixups before
* we proceed to resource allocation
*/
- if (ppc_md.pcibios_fixup_phb)
- ppc_md.pcibios_fixup_phb(hose);
+ ppc_md_call_cond(pcibios_fixup_phb)(hose);

/* Configure PCI Express settings */
if (bus && !pci_has_flag(PCI_PROBE_ONLY)) {
@@ -1709,8 +1703,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, fixup_hide_host_re

static int __init discover_phbs(void)
{
- if (ppc_md.discover_phbs)
- ppc_md.discover_phbs();
+ ppc_md_call_cond(discover_phbs)();

return 0;
}
diff --git a/arch/powerpc/kernel/pci_32.c b/arch/powerpc/kernel/pci_32.c
index b49e1060a3bf..b58a4f38f1d1 100644
--- a/arch/powerpc/kernel/pci_32.c
+++ b/arch/powerpc/kernel/pci_32.c
@@ -264,12 +264,10 @@ static int __init pcibios_init(void)
pcibios_resource_survey();

/* Call machine dependent fixup */
- if (ppc_md.pcibios_fixup)
- ppc_md.pcibios_fixup();
+ ppc_md_call_cond(pcibios_fixup)();

/* Call machine dependent post-init code */
- if (ppc_md.pcibios_after_init)
- ppc_md.pcibios_after_init();
+ ppc_md_call_cond(pcibios_after_init)();

return 0;
}
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c
index 3fb7e572abed..661f6764fcdd 100644
--- a/arch/powerpc/kernel/pci_64.c
+++ b/arch/powerpc/kernel/pci_64.c
@@ -46,7 +46,7 @@ static int __init pcibios_init(void)
/* For now, override phys_mem_access_prot. If we need it,g
* later, we may move that initialization to each ppc_md
*/
- ppc_md.phys_mem_access_prot = pci_phys_mem_access_prot;
+ ppc_md_update(phys_mem_access_prot, pci_phys_mem_access_prot);

/* On ppc64, we always enable PCI domains and we keep domain 0
* backward compatible in /proc for video cards
@@ -65,8 +65,7 @@ static int __init pcibios_init(void)
pci_bus_add_devices(hose->bus);

/* Call machine dependent fixup */
- if (ppc_md.pcibios_fixup)
- ppc_md.pcibios_fixup();
+ ppc_md_call_cond(pcibios_fixup)();

printk(KERN_DEBUG "PCI: Probing PCI hardware done\n");

diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 50436b52c213..5f3970a11d76 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -814,8 +814,8 @@ static inline int set_dabr(struct arch_hw_breakpoint *brk)
dabr = brk->address | (brk->type & HW_BRK_TYPE_DABR);
dabrx = ((brk->type >> 3) & 0x7);

- if (ppc_md.set_dabr)
- return ppc_md.set_dabr(dabr, dabrx);
+ if (ppc_md_has(set_dabr))
+ return ppc_md_call(set_dabr)(dabr, dabrx);

if (IS_ENABLED(CONFIG_PPC_ADV_DEBUG_REGS)) {
mtspr(SPRN_DAC1, dabr);
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
index 96e88209e605..9e2e1c4c6c62 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -132,8 +132,7 @@ void machine_shutdown(void)
*/
fadump_cleanup();

- if (ppc_md.machine_shutdown)
- ppc_md.machine_shutdown();
+ ppc_md_call_cond(machine_shutdown)();
}

static void machine_hang(void)
@@ -147,8 +146,7 @@ static void machine_hang(void)
void machine_restart(char *cmd)
{
machine_shutdown();
- if (ppc_md.restart)
- ppc_md.restart(cmd);
+ ppc_md_call_cond(restart)(cmd);

smp_send_stop();

@@ -176,8 +174,7 @@ EXPORT_SYMBOL_GPL(pm_power_off);
void machine_halt(void)
{
machine_shutdown();
- if (ppc_md.halt)
- ppc_md.halt();
+ ppc_md_call_cond(halt)();

smp_send_stop();
machine_hang();
@@ -210,8 +207,7 @@ static void show_cpuinfo_summary(struct seq_file *m)
seq_printf(m, "model\t\t: %s\n", model);
of_node_put(root);

- if (ppc_md.show_cpuinfo != NULL)
- ppc_md.show_cpuinfo(m);
+ ppc_md_call_cond(show_cpuinfo)(m);

/* Display the amount of memory */
if (IS_ENABLED(CONFIG_PPC32))
@@ -265,12 +261,12 @@ static int show_cpuinfo(struct seq_file *m, void *v)

/*
* Platforms that have variable clock rates, should implement
- * the method ppc_md.get_proc_freq() that reports the clock
+ * the method ppc_md_call(get_proc_freq)() that reports the clock
* rate of a given cpu. The rest can use ppc_proc_freq to
* report the clock rate that is same across all cpus.
*/
- if (ppc_md.get_proc_freq)
- proc_freq = ppc_md.get_proc_freq(cpu_id);
+ if (ppc_md_has(get_proc_freq))
+ proc_freq = ppc_md_call(get_proc_freq)(cpu_id);
else
proc_freq = ppc_proc_freq;

@@ -694,8 +690,7 @@ static int ppc_panic_event(struct notifier_block *this,
* firmware-assisted dump and let firmware handle everything else.
*/
crash_fadump(NULL, ptr);
- if (ppc_md.panic)
- ppc_md.panic(ptr); /* May not return */
+ ppc_md_call_cond(panic)(ptr); /* May not return */
return NOTIFY_DONE;
}

@@ -727,7 +722,7 @@ void __init setup_panic(void)
&kernel_offset_notifier);

/* PPC64 always does a hard irq disable in its panic handler */
- if (!IS_ENABLED(CONFIG_PPC64) && !ppc_md.panic)
+ if (!IS_ENABLED(CONFIG_PPC64) && !ppc_md_has(panic))
return;
atomic_notifier_chain_register(&panic_notifier_list, &ppc_panic_block);
}
@@ -924,8 +919,7 @@ void __init setup_arch(char **cmdline_p)

early_memtest(min_low_pfn << PAGE_SHIFT, max_low_pfn << PAGE_SHIFT);

- if (ppc_md.setup_arch)
- ppc_md.setup_arch();
+ ppc_md_call_cond(setup_arch)();

setup_barrier_nospec();
setup_spectre_v2();
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index 7ec5c47fce0e..c7afeff8abb2 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -126,13 +126,11 @@ __setup("l3cr=", ppc_setup_l3cr);
static int __init ppc_init(void)
{
/* clear the progress line */
- if (ppc_md.progress)
- ppc_md.progress(" ", 0xffff);
+ ppc_md_call_cond(progress)(" ", 0xffff);

/* call platform init */
- if (ppc_md.init != NULL) {
- ppc_md.init();
- }
+ ppc_md_call_cond(init)();
+
return 0;
}
arch_initcall(ppc_init);
@@ -203,13 +201,13 @@ void __init setup_power_save(void)
#ifdef CONFIG_PPC_BOOK3S_32
if (cpu_has_feature(CPU_FTR_CAN_DOZE) ||
cpu_has_feature(CPU_FTR_CAN_NAP))
- ppc_md.power_save = ppc6xx_idle;
+ ppc_md_update(power_save, ppc6xx_idle);
#endif

#ifdef CONFIG_E500
if (cpu_has_feature(CPU_FTR_CAN_DOZE) ||
cpu_has_feature(CPU_FTR_CAN_NAP))
- ppc_md.power_save = e500_idle;
+ ppc_md_update(power_save, e500_idle);
#endif
}

diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index eaa79a0996d1..786e48ba8003 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -915,8 +915,8 @@ void __init setup_per_cpu_areas(void)
#ifdef CONFIG_MEMORY_HOTPLUG_SPARSE
unsigned long memory_block_size_bytes(void)
{
- if (ppc_md.memory_block_size)
- return ppc_md.memory_block_size();
+ if (ppc_md_has(memory_block_size))
+ return ppc_md_call(memory_block_size)();

return MIN_MEMORY_BLOCK_SIZE;
}
diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c
index defecb3b1b15..e18a50b845a4 100644
--- a/arch/powerpc/kernel/sysfs.c
+++ b/arch/powerpc/kernel/sysfs.c
@@ -543,8 +543,7 @@ void ppc_enable_pmcs(void)

__this_cpu_write(pmcs_enabled, 1);

- if (ppc_md.enable_pmcs)
- ppc_md.enable_pmcs();
+ ppc_md_call_cond(enable_pmcs)();
}
EXPORT_SYMBOL(ppc_enable_pmcs);

@@ -1023,16 +1022,16 @@ static int unregister_cpu_online(unsigned int cpu)
#ifdef CONFIG_ARCH_CPU_PROBE_RELEASE
ssize_t arch_cpu_probe(const char *buf, size_t count)
{
- if (ppc_md.cpu_probe)
- return ppc_md.cpu_probe(buf, count);
+ if (ppc_md_has(cpu_probe))
+ return ppc_md_call(cpu_probe)(buf, count);

return -EINVAL;
}

ssize_t arch_cpu_release(const char *buf, size_t count)
{
- if (ppc_md.cpu_release)
- return ppc_md.cpu_release(buf, count);
+ if (ppc_md_has(cpu_release))
+ return ppc_md_call(cpu_release)(buf, count);

return -EINVAL;
}
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
index cae8f03a44fe..13d07836a8b0 100644
--- a/arch/powerpc/kernel/time.c
+++ b/arch/powerpc/kernel/time.c
@@ -634,8 +634,7 @@ void timer_broadcast_interrupt(void)
/* Overrides the weak version in kernel/power/main.c */
void arch_suspend_disable_irqs(void)
{
- if (ppc_md.suspend_disable_irqs)
- ppc_md.suspend_disable_irqs();
+ ppc_md_call_cond(suspend_disable_irqs)();

/* Disable the decrementer, so that it doesn't interfere
* with suspending.
@@ -651,8 +650,7 @@ void arch_suspend_enable_irqs(void)
{
local_irq_enable();

- if (ppc_md.suspend_enable_irqs)
- ppc_md.suspend_enable_irqs();
+ ppc_md_call_cond(suspend_enable_irqs)();
}
#endif

@@ -772,12 +770,12 @@ int update_persistent_clock64(struct timespec64 now)
{
struct rtc_time tm;

- if (!ppc_md.set_rtc_time)
+ if (!ppc_md_has(set_rtc_time))
return -ENODEV;

rtc_time64_to_tm(now.tv_sec + 1 + timezone_offset, &tm);

- return ppc_md.set_rtc_time(&tm);
+ return ppc_md_call(set_rtc_time)(&tm);
}

static void __read_persistent_clock(struct timespec64 *ts)
@@ -789,20 +787,20 @@ static void __read_persistent_clock(struct timespec64 *ts)
/* XXX this is a litle fragile but will work okay in the short term */
if (first) {
first = 0;
- if (ppc_md.time_init)
- timezone_offset = ppc_md.time_init();
+ if (ppc_md_has(time_init))
+ timezone_offset = ppc_md_call(time_init)();

/* get_boot_time() isn't guaranteed to be safe to call late */
- if (ppc_md.get_boot_time) {
- ts->tv_sec = ppc_md.get_boot_time() - timezone_offset;
+ if (ppc_md_has(get_boot_time)) {
+ ts->tv_sec = ppc_md_call(get_boot_time)() - timezone_offset;
return;
}
}
- if (!ppc_md.get_rtc_time) {
+ if (!ppc_md_has(get_rtc_time)) {
ts->tv_sec = 0;
return;
}
- ppc_md.get_rtc_time(&tm);
+ ppc_md_call(get_rtc_time)(&tm);

ts->tv_sec = rtc_tm_to_time64(&tm);
}
@@ -946,7 +944,7 @@ void __init time_init(void)
unsigned shift;

/* Normal PowerPC with timebase register */
- ppc_md.calibrate_decr();
+ ppc_md_call(calibrate_decr)();
printk(KERN_DEBUG "time_init: decrementer frequency = %lu.%.6lu MHz\n",
ppc_tb_freq / 1000000, ppc_tb_freq % 1000000);
printk(KERN_DEBUG "time_init: processor frequency = %lu.%.6lu MHz\n",
@@ -1050,16 +1048,16 @@ void calibrate_delay(void)
#if IS_ENABLED(CONFIG_RTC_DRV_GENERIC)
static int rtc_generic_get_time(struct device *dev, struct rtc_time *tm)
{
- ppc_md.get_rtc_time(tm);
+ ppc_md_call(get_rtc_time)(tm);
return 0;
}

static int rtc_generic_set_time(struct device *dev, struct rtc_time *tm)
{
- if (!ppc_md.set_rtc_time)
+ if (!ppc_md_has(set_rtc_time))
return -EOPNOTSUPP;

- if (ppc_md.set_rtc_time(tm) < 0)
+ if (ppc_md_call(set_rtc_time)(tm) < 0)
return -EOPNOTSUPP;

return 0;
@@ -1074,7 +1072,7 @@ static int __init rtc_init(void)
{
struct platform_device *pdev;

- if (!ppc_md.get_rtc_time)
+ if (!ppc_md_has(get_rtc_time))
return -ENODEV;

pdev = platform_device_register_data(NULL, "rtc-generic", -1,
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index 96bec6349876..f629f28d9b80 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -456,8 +456,8 @@ DEFINE_INTERRUPT_HANDLER_NMI(system_reset_exception)
__this_cpu_inc(irq_stat.sreset_irqs);

/* See if any machine dependent calls */
- if (ppc_md.system_reset_exception) {
- if (ppc_md.system_reset_exception(regs))
+ if (ppc_md_has(system_reset_exception)) {
+ if (ppc_md_call(system_reset_exception)(regs))
goto out;
}

@@ -822,8 +822,8 @@ DEFINE_INTERRUPT_HANDLER_NMI(machine_check_exception)
* that assumes the board gets a first chance, so let's keep it
* that way for now and fix things later. --BenH.
*/
- if (ppc_md.machine_check_exception)
- recover = ppc_md.machine_check_exception(regs);
+ if (ppc_md_has(machine_check_exception))
+ recover = ppc_md_call(machine_check_exception)(regs);
else if (cur_cpu_spec->machine_check)
recover = cur_cpu_spec->machine_check(regs);

@@ -1057,8 +1057,7 @@ DEFINE_INTERRUPT_HANDLER_ASYNC(handle_hmi_exception)
}
#endif /* CONFIG_VSX */

- if (ppc_md.handle_hmi_exception)
- ppc_md.handle_hmi_exception(regs);
+ ppc_md_call_cond(handle_hmi_exception)(regs);

set_irq_regs(old_regs);
}
diff --git a/arch/powerpc/kexec/core.c b/arch/powerpc/kexec/core.c
index a2242017e55f..6fd61825c943 100644
--- a/arch/powerpc/kexec/core.c
+++ b/arch/powerpc/kexec/core.c
@@ -87,8 +87,8 @@ void machine_kexec(struct kimage *image)
save_ftrace_enabled = __ftrace_enabled_save();
this_cpu_disable_ftrace();

- if (ppc_md.machine_kexec)
- ppc_md.machine_kexec(image);
+ if (ppc_md_has(machine_kexec))
+ ppc_md_call(machine_kexec)(image);
else
default_machine_kexec(image);

diff --git a/arch/powerpc/kexec/core_64.c b/arch/powerpc/kexec/core_64.c
index 66678518b938..0cd3d57db5f5 100644
--- a/arch/powerpc/kexec/core_64.c
+++ b/arch/powerpc/kexec/core_64.c
@@ -153,8 +153,7 @@ static void kexec_smp_down(void *arg)
* Now every CPU has IRQs off, we can clear out any pending
* IPIs and be sure that no more will come in after this.
*/
- if (ppc_md.kexec_cpu_down)
- ppc_md.kexec_cpu_down(0, 1);
+ ppc_md_call_cond(kexec_cpu_down)(0, 1);

reset_sprs();

@@ -244,8 +243,7 @@ static void kexec_prepare_cpus(void)
kexec_prepare_cpus_wait(KEXEC_STATE_REAL_MODE);

/* after we tell the others to go down */
- if (ppc_md.kexec_cpu_down)
- ppc_md.kexec_cpu_down(0, 0);
+ ppc_md_call_cond(kexec_cpu_down)(0, 0);

put_cpu();
}
@@ -264,8 +262,7 @@ static void kexec_prepare_cpus(void)
* UP to an SMP kernel.
*/
smp_release_cpus();
- if (ppc_md.kexec_cpu_down)
- ppc_md.kexec_cpu_down(0, 0);
+ ppc_md_call_cond(kexec_cpu_down)(0, 0);
local_irq_disable();
hard_irq_disable();
}
diff --git a/arch/powerpc/kexec/crash.c b/arch/powerpc/kexec/crash.c
index 10f997e6bb95..9e2b56b04869 100644
--- a/arch/powerpc/kexec/crash.c
+++ b/arch/powerpc/kexec/crash.c
@@ -90,8 +90,7 @@ void crash_ipi_callback(struct pt_regs *regs)
while (!time_to_dump)
cpu_relax();

- if (ppc_md.kexec_cpu_down)
- ppc_md.kexec_cpu_down(1, 1);
+ ppc_md_call_cond(kexec_cpu_down)(1, 1);

#ifdef CONFIG_PPC64
kexec_smp_wait();
@@ -373,6 +372,5 @@ void default_machine_crash_shutdown(struct pt_regs *regs)
crash_shutdown_cpu = -1;
__debugger_fault_handler = old_handler;

- if (ppc_md.kexec_cpu_down)
- ppc_md.kexec_cpu_down(1, 0);
+ ppc_md_call_cond(kexec_cpu_down)(1, 0);
}
diff --git a/arch/powerpc/kvm/book3s_hv_ras.c b/arch/powerpc/kvm/book3s_hv_ras.c
index d4bca93b79f6..62baa228c356 100644
--- a/arch/powerpc/kvm/book3s_hv_ras.c
+++ b/arch/powerpc/kvm/book3s_hv_ras.c
@@ -295,8 +295,7 @@ long kvmppc_realmode_hmi_handler(void)
* subcore on this core have completed guest->host partition
* switch. Now it is safe to call HMI handler.
*/
- if (ppc_md.hmi_exception_early)
- ppc_md.hmi_exception_early(NULL);
+ ppc_md_call_cond(hmi_exception_early)(NULL);

/*
* Check if this thread is responsible to resync TB.
diff --git a/arch/powerpc/mm/book3s32/mmu.c b/arch/powerpc/mm/book3s32/mmu.c
index 27061583a010..9f4ccdd36224 100644
--- a/arch/powerpc/mm/book3s32/mmu.c
+++ b/arch/powerpc/mm/book3s32/mmu.c
@@ -353,7 +353,7 @@ void __init MMU_init_hw(void)
if (!mmu_has_feature(MMU_FTR_HPTE_TABLE))
return;

- if ( ppc_md.progress ) ppc_md.progress("hash:enter", 0x105);
+ ppc_md_call_cond(progress)("hash:enter", 0x105);

#define LG_HPTEG_SIZE 6 /* 64 bytes per HPTEG */
#define SDR1_LOW_BITS ((n_hpteg - 1) >> 10)
@@ -377,7 +377,7 @@ void __init MMU_init_hw(void)
/*
* Find some memory for the hash table.
*/
- if ( ppc_md.progress ) ppc_md.progress("hash:find piece", 0x322);
+ ppc_md_call_cond(progress)("hash:find piece", 0x322);
Hash = memblock_alloc(Hash_size, Hash_size);
if (!Hash)
panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
@@ -402,10 +402,8 @@ void __init MMU_init_hw_patch(void)
if (!mmu_has_feature(MMU_FTR_HPTE_TABLE))
return;

- if (ppc_md.progress)
- ppc_md.progress("hash:patch", 0x345);
- if (ppc_md.progress)
- ppc_md.progress("hash:done", 0x205);
+ ppc_md_call_cond(progress)("hash:patch", 0x345);
+ ppc_md_call_cond(progress)("hash:done", 0x205);

/* WARNING: Make sure nothing can trigger a KASAN check past this point */

diff --git a/arch/powerpc/mm/book3s64/radix_pgtable.c b/arch/powerpc/mm/book3s64/radix_pgtable.c
index ae20add7954a..aedc3638116f 100644
--- a/arch/powerpc/mm/book3s64/radix_pgtable.c
+++ b/arch/powerpc/mm/book3s64/radix_pgtable.c
@@ -562,7 +562,7 @@ void __init radix__early_init_devtree(void)

/*
* Max mapping size used when mapping pages. We don't use
- * ppc_md.memory_block_size() here because this get called
+ * ppc_md_call(memory_block_size)() here because this get called
* early and we don't have machine probe called yet. Also
* the pseries implementation only check for ibm,lmb-size.
* All hypervisor supporting radix do expose that device
diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c
index 3d690be48e84..1125be46e645 100644
--- a/arch/powerpc/mm/init_32.c
+++ b/arch/powerpc/mm/init_32.c
@@ -114,8 +114,7 @@ static void __init MMU_setup(void)
*/
void __init MMU_init(void)
{
- if (ppc_md.progress)
- ppc_md.progress("MMU:enter", 0x111);
+ ppc_md_call_cond(progress)("MMU:enter", 0x111);

/* parse args from command line */
MMU_setup();
@@ -153,20 +152,17 @@ void __init MMU_init(void)
}

/* Initialize the MMU hardware */
- if (ppc_md.progress)
- ppc_md.progress("MMU:hw init", 0x300);
+ ppc_md_call_cond(progress)("MMU:hw init", 0x300);
MMU_init_hw();

/* Map in all of RAM starting at KERNELBASE */
- if (ppc_md.progress)
- ppc_md.progress("MMU:mapin", 0x301);
+ ppc_md_call_cond(progress)("MMU:mapin", 0x301);
mapin_ram();

/* Initialize early top-down ioremap allocator */
ioremap_bot = IOREMAP_TOP;

- if (ppc_md.progress)
- ppc_md.progress("MMU:exit", 0x211);
+ ppc_md_call_cond(progress)("MMU:exit", 0x211);

/* From now on, btext is no longer BAT mapped if it was at all */
#ifdef CONFIG_BOOTX_TEXT
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index ad198b439222..43fc072f290c 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -34,8 +34,8 @@ EXPORT_SYMBOL(empty_zero_page);
pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
unsigned long size, pgprot_t vma_prot)
{
- if (ppc_md.phys_mem_access_prot)
- return ppc_md.phys_mem_access_prot(file, pfn, size, vma_prot);
+ if (ppc_md_has(phys_mem_access_prot))
+ return ppc_md_call(phys_mem_access_prot)(file, pfn, size, vma_prot);

if (!page_is_ram(pfn))
vma_prot = pgprot_noncached(vma_prot);
@@ -311,7 +311,7 @@ void __init mem_init(void)

void free_initmem(void)
{
- ppc_md.progress = ppc_printk_progress;
+ ppc_md_update(progress, ppc_printk_progress);
mark_initmem_nx();
init_mem_is_free = true;
free_initmem_default(POISON_FREE_INITMEM);
diff --git a/arch/powerpc/platforms/44x/idle.c b/arch/powerpc/platforms/44x/idle.c
index f533b495e7db..f370dc8d655b 100644
--- a/arch/powerpc/platforms/44x/idle.c
+++ b/arch/powerpc/platforms/44x/idle.c
@@ -32,7 +32,7 @@ int __init ppc44x_idle_init(void)
if (!mode_spin) {
/* If we are not setting spin mode
then we set to wait mode */
- ppc_md.power_save = &ppc44x_idle;
+ ppc_md_update(power_save, &ppc44x_idle);
}

return 0;
@@ -45,7 +45,7 @@ static int __init idle_param(char *p)

if (!strcmp("spin", p)) {
mode_spin = 1;
- ppc_md.power_save = NULL;
+ ppc_md_update(power_save, NULL);
}

return 0;
diff --git a/arch/powerpc/platforms/44x/iss4xx.c b/arch/powerpc/platforms/44x/iss4xx.c
index c5f82591408c..37cc6551f0d4 100644
--- a/arch/powerpc/platforms/44x/iss4xx.c
+++ b/arch/powerpc/platforms/44x/iss4xx.c
@@ -61,7 +61,7 @@ static void __init iss4xx_init_irq(void)
/* Check type and do appropriate initialization */
if (of_device_is_compatible(np, "ibm,uic")) {
uic_init_tree();
- ppc_md.get_irq = uic_get_irq;
+ ppc_md_update(get_irq, uic_get_irq);
#ifdef CONFIG_MPIC
} else if (of_device_is_compatible(np, "chrp,open-pic")) {
/* The MPIC driver will get everything it needs from the
@@ -70,7 +70,7 @@ static void __init iss4xx_init_irq(void)
struct mpic *mpic = mpic_alloc(np, 0, MPIC_NO_RESET, 0, 0, " MPIC ");
BUG_ON(mpic == NULL);
mpic_init(mpic);
- ppc_md.get_irq = mpic_get_irq;
+ ppc_md_update(get_irq, mpic_get_irq);
#endif
} else
panic("Unrecognized top level interrupt controller");
diff --git a/arch/powerpc/platforms/44x/ppc476.c b/arch/powerpc/platforms/44x/ppc476.c
index 07f7e3ce67b5..f905bed1dadf 100644
--- a/arch/powerpc/platforms/44x/ppc476.c
+++ b/arch/powerpc/platforms/44x/ppc476.c
@@ -89,7 +89,7 @@ static void __noreturn avr_reset_system(char *cmd)
static int avr_probe(struct i2c_client *client)
{
avr_i2c_client = client;
- ppc_md.restart = avr_reset_system;
+ ppc_md_update(restart, avr_reset_system);
pm_power_off = avr_power_off_system;
return 0;
}
@@ -137,7 +137,7 @@ static void __init ppc47x_init_irq(void)
mpic_alloc(np, 0, MPIC_NO_RESET, 0, 0, " MPIC ");
BUG_ON(mpic == NULL);
mpic_init(mpic);
- ppc_md.get_irq = mpic_get_irq;
+ ppc_md_update(get_irq, mpic_get_irq);
} else
panic("Unrecognized top level interrupt controller");
}
@@ -275,7 +275,7 @@ static int __init ppc47x_probe(void)
return 1;

if (of_machine_is_compatible("ibm,currituck")) {
- ppc_md.pci_irq_fixup = ppc47x_pci_irq_fixup;
+ ppc_md_update(pci_irq_fixup, ppc47x_pci_irq_fixup);
return 1;
}

diff --git a/arch/powerpc/platforms/4xx/cpm.c b/arch/powerpc/platforms/4xx/cpm.c
index ae8b812c9202..32bf994e877a 100644
--- a/arch/powerpc/platforms/4xx/cpm.c
+++ b/arch/powerpc/platforms/4xx/cpm.c
@@ -251,7 +251,7 @@ static int __init cpm_init(void)

if (!cpm.powersave_off) {
cpm_idle_config(CPM_IDLE_WAIT);
- ppc_md.power_save = &cpm_idle;
+ ppc_md_update(power_save, &cpm_idle);
}

np = of_find_compatible_node(NULL, NULL, "ibm,cpm");
diff --git a/arch/powerpc/platforms/52xx/efika.c b/arch/powerpc/platforms/52xx/efika.c
index 3b7d70d71692..c3f43da64f68 100644
--- a/arch/powerpc/platforms/52xx/efika.c
+++ b/arch/powerpc/platforms/52xx/efika.c
@@ -190,8 +190,7 @@ static void __init efika_setup_arch(void)
mpc52xx_pm_init();
#endif

- if (ppc_md.progress)
- ppc_md.progress("Linux/PPC " UTS_RELEASE " running on Efika ;-)\n", 0x0);
+ ppc_md_call_cond(progress)("Linux/PPC " UTS_RELEASE " running on Efika ;-)\n", 0x0);
}

static int __init efika_probe(void)
diff --git a/arch/powerpc/platforms/52xx/lite5200.c b/arch/powerpc/platforms/52xx/lite5200.c
index 04cc97397095..c39601b995f6 100644
--- a/arch/powerpc/platforms/52xx/lite5200.c
+++ b/arch/powerpc/platforms/52xx/lite5200.c
@@ -147,8 +147,7 @@ static void lite5200_resume_finish(void __iomem *mbar)

static void __init lite5200_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("lite5200_setup_arch()", 0);
+ ppc_md_call_cond(progress)("lite5200_setup_arch()", 0);

/* Map important registers from the internal memory map */
mpc52xx_map_common_devices();
diff --git a/arch/powerpc/platforms/52xx/media5200.c b/arch/powerpc/platforms/52xx/media5200.c
index 110c444f4bc7..dbf32604f1f6 100644
--- a/arch/powerpc/platforms/52xx/media5200.c
+++ b/arch/powerpc/platforms/52xx/media5200.c
@@ -192,8 +192,7 @@ static void __init media5200_setup_arch(void)
struct mpc52xx_gpio __iomem *gpio;
u32 port_config;

- if (ppc_md.progress)
- ppc_md.progress("media5200_setup_arch()", 0);
+ ppc_md_call_cond(progress)("media5200_setup_arch()", 0);

/* Map important registers from the internal memory map */
mpc52xx_map_common_devices();
diff --git a/arch/powerpc/platforms/52xx/mpc5200_simple.c b/arch/powerpc/platforms/52xx/mpc5200_simple.c
index b9f5675b0a1d..18eb74a323ec 100644
--- a/arch/powerpc/platforms/52xx/mpc5200_simple.c
+++ b/arch/powerpc/platforms/52xx/mpc5200_simple.c
@@ -32,8 +32,7 @@
*/
static void __init mpc5200_simple_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("mpc5200_simple_setup_arch()", 0);
+ ppc_md_call_cond(progress)("mpc5200_simple_setup_arch()", 0);

/* Map important registers from the internal memory map */
mpc52xx_map_common_devices();
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pci.c b/arch/powerpc/platforms/52xx/mpc52xx_pci.c
index af0f79995214..2c49c6caf81f 100644
--- a/arch/powerpc/platforms/52xx/mpc52xx_pci.c
+++ b/arch/powerpc/platforms/52xx/mpc52xx_pci.c
@@ -110,8 +110,8 @@ mpc52xx_pci_read_config(struct pci_bus *bus, unsigned int devfn,
struct pci_controller *hose = pci_bus_to_host(bus);
u32 value;

- if (ppc_md.pci_exclude_device)
- if (ppc_md.pci_exclude_device(hose, bus->number, devfn))
+ if (ppc_md_has(pci_exclude_device))
+ if (ppc_md_call(pci_exclude_device)(hose, bus->number, devfn))
return PCIBIOS_DEVICE_NOT_FOUND;

out_be32(hose->cfg_addr,
@@ -167,8 +167,8 @@ mpc52xx_pci_write_config(struct pci_bus *bus, unsigned int devfn,
struct pci_controller *hose = pci_bus_to_host(bus);
u32 value, mask;

- if (ppc_md.pci_exclude_device)
- if (ppc_md.pci_exclude_device(hose, bus->number, devfn))
+ if (ppc_md_has(pci_exclude_device))
+ if (ppc_md_call(pci_exclude_device)(hose, bus->number, devfn))
return PCIBIOS_DEVICE_NOT_FOUND;

out_be32(hose->cfg_addr,
@@ -387,7 +387,7 @@ mpc52xx_add_bridge(struct device_node *node)

/* There are some PCI quirks on the 52xx, register the hook to
* fix them. */
- ppc_md.pcibios_fixup_resources = mpc52xx_pci_fixup_resources;
+ ppc_md_update(pcibios_fixup_resources, mpc52xx_pci_fixup_resources);

/* Alloc and initialize the pci controller. Values in the device
* tree are needed to configure the 52xx PCI controller. Rather
diff --git a/arch/powerpc/platforms/82xx/ep8248e.c b/arch/powerpc/platforms/82xx/ep8248e.c
index 369ebb1b7af1..3ca47f8a212e 100644
--- a/arch/powerpc/platforms/82xx/ep8248e.c
+++ b/arch/powerpc/platforms/82xx/ep8248e.c
@@ -250,8 +250,7 @@ static void __init init_ioports(void)

static void __init ep8248e_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("ep8248e_setup_arch()", 0);
+ ppc_md_call_cond(progress)("ep8248e_setup_arch()", 0);

cpm2_reset();

@@ -281,8 +280,7 @@ static void __init ep8248e_setup_arch(void)

init_ioports();

- if (ppc_md.progress)
- ppc_md.progress("ep8248e_setup_arch(), finish", 0);
+ ppc_md_call_cond(progress)("ep8248e_setup_arch(), finish", 0);
}

static const struct of_device_id of_bus_ids[] __initconst = {
diff --git a/arch/powerpc/platforms/82xx/km82xx.c b/arch/powerpc/platforms/82xx/km82xx.c
index 745ed61df5d8..31fd4a5be0ee 100644
--- a/arch/powerpc/platforms/82xx/km82xx.c
+++ b/arch/powerpc/platforms/82xx/km82xx.c
@@ -160,8 +160,7 @@ static void __init init_ioports(void)

static void __init km82xx_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("km82xx_setup_arch()", 0);
+ ppc_md_call_cond(progress)("km82xx_setup_arch()", 0);

cpm2_reset();

@@ -172,8 +171,7 @@ static void __init km82xx_setup_arch(void)

init_ioports();

- if (ppc_md.progress)
- ppc_md.progress("km82xx_setup_arch(), finish", 0);
+ ppc_md_call_cond(progress)("km82xx_setup_arch(), finish", 0);
}

static const struct of_device_id of_bus_ids[] __initconst = {
diff --git a/arch/powerpc/platforms/82xx/mpc8272_ads.c b/arch/powerpc/platforms/82xx/mpc8272_ads.c
index 0b5b9dec16d5..deacb2fa84f4 100644
--- a/arch/powerpc/platforms/82xx/mpc8272_ads.c
+++ b/arch/powerpc/platforms/82xx/mpc8272_ads.c
@@ -134,8 +134,7 @@ static void __init mpc8272_ads_setup_arch(void)
struct device_node *np;
__be32 __iomem *bcsr;

- if (ppc_md.progress)
- ppc_md.progress("mpc8272_ads_setup_arch()", 0);
+ ppc_md_call_cond(progress)("mpc8272_ads_setup_arch()", 0);

cpm2_reset();

@@ -172,8 +171,7 @@ static void __init mpc8272_ads_setup_arch(void)

init_ioports();

- if (ppc_md.progress)
- ppc_md.progress("mpc8272_ads_setup_arch(), finish", 0);
+ ppc_md_call_cond(progress)("mpc8272_ads_setup_arch(), finish", 0);
}

static const struct of_device_id of_bus_ids[] __initconst = {
diff --git a/arch/powerpc/platforms/82xx/pq2.c b/arch/powerpc/platforms/82xx/pq2.c
index 3b5cb39a564c..fee7ea4519df 100644
--- a/arch/powerpc/platforms/82xx/pq2.c
+++ b/arch/powerpc/platforms/82xx/pq2.c
@@ -72,7 +72,7 @@ void __init pq2_init_pci(void)
{
struct device_node *np;

- ppc_md.pci_exclude_device = pq2_pci_exclude_device;
+ ppc_md_update(pci_exclude_device, pq2_pci_exclude_device);

for_each_compatible_node(np, NULL, "fsl,pq2-pci")
pq2_pci_add_bridge(np);
diff --git a/arch/powerpc/platforms/82xx/pq2fads.c b/arch/powerpc/platforms/82xx/pq2fads.c
index ac9113d524af..794349c53f59 100644
--- a/arch/powerpc/platforms/82xx/pq2fads.c
+++ b/arch/powerpc/platforms/82xx/pq2fads.c
@@ -117,8 +117,7 @@ static void __init pq2fads_setup_arch(void)
struct device_node *np;
__be32 __iomem *bcsr;

- if (ppc_md.progress)
- ppc_md.progress("pq2fads_setup_arch()", 0);
+ ppc_md_call_cond(progress)("pq2fads_setup_arch()", 0);

cpm2_reset();

@@ -150,8 +149,7 @@ static void __init pq2fads_setup_arch(void)
/* Enable external IRQs */
clrbits32(&cpm2_immr->im_siu_conf.siu_82xx.sc_siumcr, 0x0c000000);

- if (ppc_md.progress)
- ppc_md.progress("pq2fads_setup_arch(), finish", 0);
+ ppc_md_call_cond(progress)("pq2fads_setup_arch(), finish", 0);
}

/*
diff --git a/arch/powerpc/platforms/83xx/misc.c b/arch/powerpc/platforms/83xx/misc.c
index 3285dabcf923..e9e671ff68a4 100644
--- a/arch/powerpc/platforms/83xx/misc.c
+++ b/arch/powerpc/platforms/83xx/misc.c
@@ -121,8 +121,7 @@ void __init mpc83xx_setup_pci(void)

void __init mpc83xx_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("mpc83xx_setup_arch()", 0);
+ ppc_md_call_cond(progress)("mpc83xx_setup_arch()", 0);

if (!__map_without_bats) {
phys_addr_t immrbase = get_immrbase();
diff --git a/arch/powerpc/platforms/85xx/bsc913x_qds.c b/arch/powerpc/platforms/85xx/bsc913x_qds.c
index bcbbeb5a972a..bad1423d012d 100644
--- a/arch/powerpc/platforms/85xx/bsc913x_qds.c
+++ b/arch/powerpc/platforms/85xx/bsc913x_qds.c
@@ -36,8 +36,7 @@ void __init bsc913x_qds_pic_init(void)
*/
static void __init bsc913x_qds_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("bsc913x_qds_setup_arch()", 0);
+ ppc_md_call_cond(progress)("bsc913x_qds_setup_arch()", 0);

#if defined(CONFIG_SMP)
mpc85xx_smp_init();
diff --git a/arch/powerpc/platforms/85xx/bsc913x_rdb.c b/arch/powerpc/platforms/85xx/bsc913x_rdb.c
index f78e5d3deedb..6dc34569a940 100644
--- a/arch/powerpc/platforms/85xx/bsc913x_rdb.c
+++ b/arch/powerpc/platforms/85xx/bsc913x_rdb.c
@@ -32,8 +32,7 @@ void __init bsc913x_rdb_pic_init(void)
*/
static void __init bsc913x_rdb_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("bsc913x_rdb_setup_arch()", 0);
+ ppc_md_call_cond(progress)("bsc913x_rdb_setup_arch()", 0);

pr_info("bsc913x board from Freescale Semiconductor\n");
}
diff --git a/arch/powerpc/platforms/85xx/c293pcie.c b/arch/powerpc/platforms/85xx/c293pcie.c
index 8d9a2503dd0f..8c59eeb92507 100644
--- a/arch/powerpc/platforms/85xx/c293pcie.c
+++ b/arch/powerpc/platforms/85xx/c293pcie.c
@@ -35,8 +35,7 @@ void __init c293_pcie_pic_init(void)
*/
static void __init c293_pcie_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("c293_pcie_setup_arch()", 0);
+ ppc_md_call_cond(progress)("c293_pcie_setup_arch()", 0);

fsl_pci_assign_primary();

diff --git a/arch/powerpc/platforms/85xx/corenet_generic.c b/arch/powerpc/platforms/85xx/corenet_generic.c
index 17ae75d62518..f2da4d23da23 100644
--- a/arch/powerpc/platforms/85xx/corenet_generic.c
+++ b/arch/powerpc/platforms/85xx/corenet_generic.c
@@ -157,12 +157,12 @@ static int __init corenet_generic_probe(void)
for (i = 0; boards[i]; i++) {
snprintf(hv_compat, sizeof(hv_compat), "%s-hv", boards[i]);
if (of_machine_is_compatible(hv_compat)) {
- ppc_md.init_IRQ = ehv_pic_init;
+ ppc_md_update(init_IRQ, ehv_pic_init);

- ppc_md.get_irq = ehv_pic_get_irq;
- ppc_md.restart = fsl_hv_restart;
+ ppc_md_update(get_irq, ehv_pic_get_irq);
+ ppc_md_update(restart, fsl_hv_restart);
pm_power_off = fsl_hv_halt;
- ppc_md.halt = fsl_hv_halt;
+ ppc_md_update(halt, fsl_hv_halt);
#ifdef CONFIG_SMP
/*
* Disable the timebase sync operations because we
diff --git a/arch/powerpc/platforms/85xx/ge_imp3a.c b/arch/powerpc/platforms/85xx/ge_imp3a.c
index 83a0f7a1f0de..24a16c29c4a5 100644
--- a/arch/powerpc/platforms/85xx/ge_imp3a.c
+++ b/arch/powerpc/platforms/85xx/ge_imp3a.c
@@ -103,8 +103,7 @@ static void __init ge_imp3a_setup_arch(void)
{
struct device_node *regs;

- if (ppc_md.progress)
- ppc_md.progress("ge_imp3a_setup_arch()", 0);
+ ppc_md_call_cond(progress)("ge_imp3a_setup_arch()", 0);

mpc85xx_smp_init();

diff --git a/arch/powerpc/platforms/85xx/ksi8560.c b/arch/powerpc/platforms/85xx/ksi8560.c
index 6ef8580fdc0e..67b6cdad925b 100644
--- a/arch/powerpc/platforms/85xx/ksi8560.c
+++ b/arch/powerpc/platforms/85xx/ksi8560.c
@@ -134,8 +134,7 @@ static void __init ksi8560_setup_arch(void)
else
printk(KERN_ERR "Can't find CPLD in device tree\n");

- if (ppc_md.progress)
- ppc_md.progress("ksi8560_setup_arch()", 0);
+ ppc_md_call_cond(progress)("ksi8560_setup_arch()", 0);

#ifdef CONFIG_CPM2
cpm2_reset();
diff --git a/arch/powerpc/platforms/85xx/mpc8536_ds.c b/arch/powerpc/platforms/85xx/mpc8536_ds.c
index 53bccb8bbcbe..78ce62e645e6 100644
--- a/arch/powerpc/platforms/85xx/mpc8536_ds.c
+++ b/arch/powerpc/platforms/85xx/mpc8536_ds.c
@@ -41,8 +41,7 @@ void __init mpc8536_ds_pic_init(void)
*/
static void __init mpc8536_ds_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("mpc8536_ds_setup_arch()", 0);
+ ppc_md_call_cond(progress)("mpc8536_ds_setup_arch()", 0);

fsl_pci_assign_primary();

diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ads.c b/arch/powerpc/platforms/85xx/mpc85xx_ads.c
index a34fc037957d..e1d24b78725b 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_ads.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_ads.c
@@ -122,8 +122,7 @@ static void __init init_ioports(void)

static void __init mpc85xx_ads_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("mpc85xx_ads_setup_arch()", 0);
+ ppc_md_call_cond(progress)("mpc85xx_ads_setup_arch()", 0);

#ifdef CONFIG_CPM2
cpm2_reset();
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_cds.c b/arch/powerpc/platforms/85xx/mpc85xx_cds.c
index 172d2b7cfeb7..bc7bdf0cab6e 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_cds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_cds.c
@@ -317,8 +317,7 @@ static void __init mpc85xx_cds_setup_arch(void)
struct device_node *np;
int cds_pci_slot;

- if (ppc_md.progress)
- ppc_md.progress("mpc85xx_cds_setup_arch()", 0);
+ ppc_md_call_cond(progress)("mpc85xx_cds_setup_arch()", 0);

np = of_find_compatible_node(NULL, NULL, "fsl,mpc8548cds-fpga");
if (!np) {
@@ -333,17 +332,17 @@ static void __init mpc85xx_cds_setup_arch(void)
return;
}

- if (ppc_md.progress) {
+ if (ppc_md_has(progress)) {
char buf[40];
cds_pci_slot = ((in_8(&cadmus->cm_csr) >> 6) & 0x3) + 1;
snprintf(buf, 40, "CDS Version = 0x%x in slot %d\n",
in_8(&cadmus->cm_ver), cds_pci_slot);
- ppc_md.progress(buf, 0);
+ ppc_md_call(progress)(buf, 0);
}

#ifdef CONFIG_PCI
- ppc_md.pci_irq_fixup = mpc85xx_cds_pci_irq_fixup;
- ppc_md.pci_exclude_device = mpc85xx_exclude_device;
+ ppc_md_update(pci_irq_fixup, mpc85xx_cds_pci_irq_fixup);
+ ppc_md_update(pci_exclude_device, mpc85xx_exclude_device);
#endif

mpc85xx_cds_pci_assign_primary();
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ds.c b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
index 2157a8017aa4..960203bd83cd 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_ds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
@@ -135,7 +135,7 @@ static void __init mpc85xx_ds_uli_init(void)
node = pci_with_uli;

if (pci_with_uli == fsl_pci_primary) {
- ppc_md.pci_exclude_device = mpc85xx_exclude_device;
+ ppc_md_update(pci_exclude_device, mpc85xx_exclude_device);
break;
}
}
@@ -147,8 +147,7 @@ static void __init mpc85xx_ds_uli_init(void)
*/
static void __init mpc85xx_ds_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("mpc85xx_ds_setup_arch()", 0);
+ ppc_md_call_cond(progress)("mpc85xx_ds_setup_arch()", 0);

swiotlb_detect_4g();
fsl_pci_assign_primary();
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/arch/powerpc/platforms/85xx/mpc85xx_mds.c
index 7759eca7d535..a74c1e9520f7 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_mds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_mds.c
@@ -273,8 +273,7 @@ static void __init mpc85xx_mds_qe_init(void) { }

static void __init mpc85xx_mds_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("mpc85xx_mds_setup_arch()", 0);
+ ppc_md_call_cond(progress)("mpc85xx_mds_setup_arch()", 0);

mpc85xx_smp_init();

diff --git a/arch/powerpc/platforms/85xx/mpc85xx_rdb.c b/arch/powerpc/platforms/85xx/mpc85xx_rdb.c
index 80a80174768c..14cad0505d82 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_rdb.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_rdb.c
@@ -64,8 +64,7 @@ void __init mpc85xx_rdb_pic_init(void)
*/
static void __init mpc85xx_rdb_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("mpc85xx_rdb_setup_arch()", 0);
+ ppc_md_call_cond(progress)("mpc85xx_rdb_setup_arch()", 0);

mpc85xx_smp_init();

diff --git a/arch/powerpc/platforms/85xx/mvme2500.c b/arch/powerpc/platforms/85xx/mvme2500.c
index 69d5aa082a4b..1dc98fb60c1a 100644
--- a/arch/powerpc/platforms/85xx/mvme2500.c
+++ b/arch/powerpc/platforms/85xx/mvme2500.c
@@ -35,8 +35,7 @@ void __init mvme2500_pic_init(void)
*/
static void __init mvme2500_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("mvme2500_setup_arch()", 0);
+ ppc_md_call_cond(progress)("mvme2500_setup_arch()", 0);
fsl_pci_assign_primary();
pr_info("MVME2500 board from Artesyn\n");
}
diff --git a/arch/powerpc/platforms/85xx/p1010rdb.c b/arch/powerpc/platforms/85xx/p1010rdb.c
index 24855284b14a..7ec9ced12eb3 100644
--- a/arch/powerpc/platforms/85xx/p1010rdb.c
+++ b/arch/powerpc/platforms/85xx/p1010rdb.c
@@ -42,8 +42,7 @@ void __init p1010_rdb_pic_init(void)
*/
static void __init p1010_rdb_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("p1010_rdb_setup_arch()", 0);
+ ppc_md_call_cond(progress)("p1010_rdb_setup_arch()", 0);

fsl_pci_assign_primary();

diff --git a/arch/powerpc/platforms/85xx/p1022_ds.c b/arch/powerpc/platforms/85xx/p1022_ds.c
index 1f1af0557470..0fc89543235d 100644
--- a/arch/powerpc/platforms/85xx/p1022_ds.c
+++ b/arch/powerpc/platforms/85xx/p1022_ds.c
@@ -470,8 +470,7 @@ early_param("video", early_video_setup);
*/
static void __init p1022_ds_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("p1022_ds_setup_arch()", 0);
+ ppc_md_call_cond(progress)("p1022_ds_setup_arch()", 0);

#if defined(CONFIG_FB_FSL_DIU) || defined(CONFIG_FB_FSL_DIU_MODULE)
diu_ops.set_monitor_port = p1022ds_set_monitor_port;
diff --git a/arch/powerpc/platforms/85xx/p1022_rdk.c b/arch/powerpc/platforms/85xx/p1022_rdk.c
index fd9e3e7ef234..c3a9ca9a216b 100644
--- a/arch/powerpc/platforms/85xx/p1022_rdk.c
+++ b/arch/powerpc/platforms/85xx/p1022_rdk.c
@@ -109,8 +109,7 @@ void __init p1022_rdk_pic_init(void)
*/
static void __init p1022_rdk_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("p1022_rdk_setup_arch()", 0);
+ ppc_md_call_cond(progress)("p1022_rdk_setup_arch()", 0);

#if defined(CONFIG_FB_FSL_DIU) || defined(CONFIG_FB_FSL_DIU_MODULE)
diu_ops.set_pixel_clock = p1022rdk_set_pixel_clock;
diff --git a/arch/powerpc/platforms/85xx/p1023_rdb.c b/arch/powerpc/platforms/85xx/p1023_rdb.c
index 3b9cc4979641..8189838a5343 100644
--- a/arch/powerpc/platforms/85xx/p1023_rdb.c
+++ b/arch/powerpc/platforms/85xx/p1023_rdb.c
@@ -41,8 +41,7 @@ static void __init mpc85xx_rdb_setup_arch(void)
{
struct device_node *np;

- if (ppc_md.progress)
- ppc_md.progress("p1023_rdb_setup_arch()", 0);
+ ppc_md_call_cond(progress)("p1023_rdb_setup_arch()", 0);

/* Map BCSR area */
np = of_find_node_by_name(NULL, "bcsr");
diff --git a/arch/powerpc/platforms/85xx/ppa8548.c b/arch/powerpc/platforms/85xx/ppa8548.c
index 0faf2990bf2c..70df147419fa 100644
--- a/arch/powerpc/platforms/85xx/ppa8548.c
+++ b/arch/powerpc/platforms/85xx/ppa8548.c
@@ -37,8 +37,7 @@ static void __init ppa8548_pic_init(void)
*/
static void __init ppa8548_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("ppa8548_setup_arch()", 0);
+ ppc_md_call_cond(progress)("ppa8548_setup_arch()", 0);
}

static void ppa8548_show_cpuinfo(struct seq_file *m)
diff --git a/arch/powerpc/platforms/85xx/qemu_e500.c b/arch/powerpc/platforms/85xx/qemu_e500.c
index a4127b0b161f..873a27a384a3 100644
--- a/arch/powerpc/platforms/85xx/qemu_e500.c
+++ b/arch/powerpc/platforms/85xx/qemu_e500.c
@@ -38,7 +38,7 @@ void __init qemu_e500_pic_init(void)

static void __init qemu_e500_setup_arch(void)
{
- ppc_md.progress("qemu_e500_setup_arch()", 0);
+ ppc_md_call_cond(progress)("qemu_e500_setup_arch()", 0);

fsl_pci_assign_primary();
swiotlb_detect_4g();
diff --git a/arch/powerpc/platforms/85xx/sgy_cts1000.c b/arch/powerpc/platforms/85xx/sgy_cts1000.c
index 98ae64075193..e70d040fd769 100644
--- a/arch/powerpc/platforms/85xx/sgy_cts1000.c
+++ b/arch/powerpc/platforms/85xx/sgy_cts1000.c
@@ -117,7 +117,7 @@ static int gpio_halt_probe(struct platform_device *pdev)
}

/* Register our halt function */
- ppc_md.halt = gpio_halt_cb;
+ ppc_md_update(halt, gpio_halt_cb);
pm_power_off = gpio_halt_cb;

printk(KERN_INFO "gpio-halt: registered GPIO %d (%d trigger, %d"
@@ -134,7 +134,7 @@ static int gpio_halt_remove(struct platform_device *pdev)

free_irq(irq, halt_node);

- ppc_md.halt = NULL;
+ ppc_md_update(halt, NULL);
pm_power_off = NULL;

gpio_free(gpio);
diff --git a/arch/powerpc/platforms/85xx/smp.c b/arch/powerpc/platforms/85xx/smp.c
index c6df294054fe..ad57821e40df 100644
--- a/arch/powerpc/platforms/85xx/smp.c
+++ b/arch/powerpc/platforms/85xx/smp.c
@@ -380,8 +380,7 @@ void mpc85xx_smp_kexec_cpu_down(int crash_shutdown, int secondary)

static void mpc85xx_smp_kexec_down(void *arg)
{
- if (ppc_md.kexec_cpu_down)
- ppc_md.kexec_cpu_down(0,1);
+ ppc_md_call_cond(kexec_cpu_down)(0,1);
}
#else
void mpc85xx_smp_kexec_cpu_down(int crash_shutdown, int secondary)
@@ -513,7 +512,7 @@ void __init mpc85xx_smp_init(void)
smp_ops = &smp_85xx_ops;

#ifdef CONFIG_KEXEC_CORE
- ppc_md.kexec_cpu_down = mpc85xx_smp_kexec_cpu_down;
- ppc_md.machine_kexec = mpc85xx_smp_machine_kexec;
+ ppc_md_update(kexec_cpu_down, mpc85xx_smp_kexec_cpu_down);
+ ppc_md_update(machine_kexec, mpc85xx_smp_machine_kexec);
#endif
}
diff --git a/arch/powerpc/platforms/85xx/socrates.c b/arch/powerpc/platforms/85xx/socrates.c
index 166b3515ba73..8bdd925f936c 100644
--- a/arch/powerpc/platforms/85xx/socrates.c
+++ b/arch/powerpc/platforms/85xx/socrates.c
@@ -62,8 +62,7 @@ static void __init socrates_pic_init(void)
*/
static void __init socrates_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("socrates_setup_arch()", 0);
+ ppc_md_call_cond(progress)("socrates_setup_arch()", 0);

fsl_pci_assign_primary();
}
diff --git a/arch/powerpc/platforms/85xx/stx_gp3.c b/arch/powerpc/platforms/85xx/stx_gp3.c
index 69e917e3ba1c..1d943461955e 100644
--- a/arch/powerpc/platforms/85xx/stx_gp3.c
+++ b/arch/powerpc/platforms/85xx/stx_gp3.c
@@ -56,8 +56,7 @@ static void __init stx_gp3_pic_init(void)
*/
static void __init stx_gp3_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("stx_gp3_setup_arch()", 0);
+ ppc_md_call_cond(progress)("stx_gp3_setup_arch()", 0);

fsl_pci_assign_primary();

diff --git a/arch/powerpc/platforms/85xx/tqm85xx.c b/arch/powerpc/platforms/85xx/tqm85xx.c
index 95a1a1118a31..70c1ec342092 100644
--- a/arch/powerpc/platforms/85xx/tqm85xx.c
+++ b/arch/powerpc/platforms/85xx/tqm85xx.c
@@ -55,8 +55,7 @@ static void __init tqm85xx_pic_init(void)
*/
static void __init tqm85xx_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("tqm85xx_setup_arch()", 0);
+ ppc_md_call_cond(progress)("tqm85xx_setup_arch()", 0);

#ifdef CONFIG_CPM2
cpm2_reset();
diff --git a/arch/powerpc/platforms/85xx/twr_p102x.c b/arch/powerpc/platforms/85xx/twr_p102x.c
index eaec099b4077..03d76552aa19 100644
--- a/arch/powerpc/platforms/85xx/twr_p102x.c
+++ b/arch/powerpc/platforms/85xx/twr_p102x.c
@@ -45,8 +45,7 @@ static void __init twr_p1025_pic_init(void)
*/
static void __init twr_p1025_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("twr_p1025_setup_arch()", 0);
+ ppc_md_call_cond(progress)("twr_p1025_setup_arch()", 0);

mpc85xx_smp_init();

diff --git a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
index 7733d0607da2..f3aa916ace73 100644
--- a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
+++ b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
@@ -275,8 +275,7 @@ static void __init mpc86xx_hpcd_setup_arch(void)
struct resource r;
unsigned char *pixis;

- if (ppc_md.progress)
- ppc_md.progress("mpc86xx_hpcd_setup_arch()", 0);
+ ppc_md_call_cond(progress)("mpc86xx_hpcd_setup_arch()", 0);

fsl_pci_assign_primary();

diff --git a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
index a6b8ffcbf01a..caa47e2c9313 100644
--- a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
+++ b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
@@ -57,11 +57,10 @@ static int mpc86xx_exclude_device(struct pci_controller *hose,
static void __init
mpc86xx_hpcn_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("mpc86xx_hpcn_setup_arch()", 0);
+ ppc_md_call_cond(progress)("mpc86xx_hpcn_setup_arch()", 0);

#ifdef CONFIG_PCI
- ppc_md.pci_exclude_device = mpc86xx_exclude_device;
+ ppc_md_update(pci_exclude_device, mpc86xx_exclude_device);
#endif

printk("MPC86xx HPCN board from Freescale Semiconductor\n");
diff --git a/arch/powerpc/platforms/86xx/mvme7100.c b/arch/powerpc/platforms/86xx/mvme7100.c
index ee983613570c..c6af6e333e2e 100644
--- a/arch/powerpc/platforms/86xx/mvme7100.c
+++ b/arch/powerpc/platforms/86xx/mvme7100.c
@@ -42,8 +42,7 @@ static void __init mvme7100_setup_arch(void)
void __iomem *mvme7100_regs = NULL;
u8 reg;

- if (ppc_md.progress)
- ppc_md.progress("mvme7100_setup_arch()", 0);
+ ppc_md_call_cond(progress)("mvme7100_setup_arch()", 0);

#ifdef CONFIG_SMP
mpc86xx_smp_init();
diff --git a/arch/powerpc/platforms/amigaone/setup.c b/arch/powerpc/platforms/amigaone/setup.c
index 9d252c554f7f..dc09a0d99e43 100644
--- a/arch/powerpc/platforms/amigaone/setup.c
+++ b/arch/powerpc/platforms/amigaone/setup.c
@@ -66,8 +66,7 @@ static int __init amigaone_add_bridge(struct device_node *dev)

void __init amigaone_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("Linux/PPC "UTS_RELEASE"\n", 0);
+ ppc_md_call_cond(progress)("Linux/PPC "UTS_RELEASE"\n", 0);
}

static void __init amigaone_discover_phbs(void)
@@ -107,7 +106,7 @@ void __init amigaone_init_IRQ(void)
" address, polling\n");

i8259_init(pic, int_ack);
- ppc_md.get_irq = i8259_irq;
+ ppc_md_update(get_irq, i8259_irq);
irq_set_default_host(i8259_get_host());
}

diff --git a/arch/powerpc/platforms/cell/interrupt.c b/arch/powerpc/platforms/cell/interrupt.c
index 0873a7a20271..ee95af4585fc 100644
--- a/arch/powerpc/platforms/cell/interrupt.c
+++ b/arch/powerpc/platforms/cell/interrupt.c
@@ -366,7 +366,7 @@ void __init iic_init_IRQ(void)
panic("IIC: Failed to initialize !\n");

/* Set master interrupt handling function */
- ppc_md.get_irq = iic_get_irq;
+ ppc_md_update(get_irq, iic_get_irq);

/* Enable on current CPU */
iic_setup_cpu();
diff --git a/arch/powerpc/platforms/cell/pervasive.c b/arch/powerpc/platforms/cell/pervasive.c
index 5b9a7e9f144b..277351f72b87 100644
--- a/arch/powerpc/platforms/cell/pervasive.c
+++ b/arch/powerpc/platforms/cell/pervasive.c
@@ -120,6 +120,6 @@ void __init cbe_pervasive_init(void)
CBE_PMD_PAUSE_ZERO_CONTROL);
}

- ppc_md.power_save = cbe_power_save;
- ppc_md.system_reset_exception = cbe_system_reset_exception;
+ ppc_md_update(power_save, cbe_power_save);
+ ppc_md_update(system_reset_exception, cbe_system_reset_exception);
}
diff --git a/arch/powerpc/platforms/cell/ras.c b/arch/powerpc/platforms/cell/ras.c
index 4325c05bedd9..46f89f8d960b 100644
--- a/arch/powerpc/platforms/cell/ras.c
+++ b/arch/powerpc/platforms/cell/ras.c
@@ -341,7 +341,7 @@ void __init cbe_ras_init(void)
* Install machine check handler. Leave setting of precise mode to
* what the firmware did for now
*/
- ppc_md.machine_check_exception = cbe_machine_check_handler;
+ ppc_md_update(machine_check_exception, cbe_machine_check_handler);
mb();

/*
diff --git a/arch/powerpc/platforms/chrp/nvram.c b/arch/powerpc/platforms/chrp/nvram.c
index e820332b59a0..931738ac7560 100644
--- a/arch/powerpc/platforms/chrp/nvram.c
+++ b/arch/powerpc/platforms/chrp/nvram.c
@@ -85,9 +85,9 @@ void __init chrp_nvram_init(void)
printk(KERN_INFO "CHRP nvram contains %u bytes\n", nvram_size);
of_node_put(nvram);

- ppc_md.nvram_read_val = chrp_nvram_read_val;
- ppc_md.nvram_write_val = chrp_nvram_write_val;
- ppc_md.nvram_size = chrp_nvram_size;
+ ppc_md_update(nvram_read_val, chrp_nvram_read_val);
+ ppc_md_update(nvram_write_val, chrp_nvram_write_val);
+ ppc_md_update(nvram_size, chrp_nvram_size);

return;
}
diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c
index 3cfc382841e5..6fad19201f5b 100644
--- a/arch/powerpc/platforms/chrp/setup.c
+++ b/arch/powerpc/platforms/chrp/setup.c
@@ -312,7 +312,7 @@ static void __init chrp_setup_arch(void)
_chrp_type = _CHRP_briq;
/* Map the SPOR register on briq and change the restart hook */
briq_SPOR = ioremap(0xff0000e8, 4);
- ppc_md.restart = briq_restart;
+ ppc_md_update(restart, briq_restart);
} else {
/* Let's assume it is an IBM chrp if all else fails */
_chrp_type = _CHRP_IBM;
@@ -322,13 +322,13 @@ static void __init chrp_setup_arch(void)

rtas_initialize();
if (rtas_token("display-character") >= 0)
- ppc_md.progress = rtas_progress;
+ ppc_md_update(progress, rtas_progress);

/* use RTAS time-of-day routines if available */
if (rtas_token("get-time-of-day") != RTAS_UNKNOWN_SERVICE) {
- ppc_md.get_boot_time = rtas_get_boot_time;
- ppc_md.get_rtc_time = rtas_get_rtc_time;
- ppc_md.set_rtc_time = rtas_set_rtc_time;
+ ppc_md_update(get_boot_time, rtas_get_boot_time);
+ ppc_md_update(get_rtc_time, rtas_get_rtc_time);
+ ppc_md_update(set_rtc_time, rtas_set_rtc_time);
}

/* On pegasos, enable the L2 cache if not already done by OF */
@@ -343,7 +343,7 @@ static void __init chrp_setup_arch(void)
* Print the banner, then scroll down so boot progress
* can be printed. -- Cort
*/
- if (ppc_md.progress) ppc_md.progress("Linux/PPC "UTS_RELEASE"\n", 0x0);
+ ppc_md_call_cond(progress)("Linux/PPC "UTS_RELEASE"\n", 0x0);
}

static void chrp_8259_cascade(struct irq_desc *desc)
@@ -433,7 +433,7 @@ static void __init chrp_find_openpic(void)
}

mpic_init(chrp_mpic);
- ppc_md.get_irq = mpic_get_irq;
+ ppc_md_update(get_irq, mpic_get_irq);
bail:
of_node_put(root);
of_node_put(np);
@@ -482,8 +482,8 @@ static void __init chrp_find_8259(void)
" address, polling\n");

i8259_init(pic, chrp_int_ack);
- if (ppc_md.get_irq == NULL) {
- ppc_md.get_irq = i8259_irq;
+ if (!ppc_md_has(get_irq)) {
+ ppc_md_update(get_irq, i8259_irq);
irq_set_default_host(i8259_get_host());
}
if (chrp_mpic != NULL) {
@@ -513,7 +513,7 @@ static void __init chrp_init_IRQ(void)
#endif /* CONFIG_SMP */

if (_chrp_type == _CHRP_Pegasos)
- ppc_md.get_irq = i8259_irq;
+ ppc_md_update(get_irq, i8259_irq);

#if defined(CONFIG_VT) && defined(CONFIG_INPUT_ADBHID) && defined(CONFIG_XMON)
/* see if there is a keyboard in the device tree
@@ -544,8 +544,7 @@ chrp_init2(void)
request_region(0x80,0x10,"dma page reg");
request_region(0xc0,0x20,"dma2");

- if (ppc_md.progress)
- ppc_md.progress(" Have fun! ", 0x7777);
+ ppc_md_call_cond(progress)(" Have fun! ", 0x7777);
}

static int __init chrp_probe(void)
diff --git a/arch/powerpc/platforms/embedded6xx/holly.c b/arch/powerpc/platforms/embedded6xx/holly.c
index 7a85b117f7a4..5dac4067a3a0 100644
--- a/arch/powerpc/platforms/embedded6xx/holly.c
+++ b/arch/powerpc/platforms/embedded6xx/holly.c
@@ -112,8 +112,7 @@ static void __init holly_init_pci(void)
{
struct device_node *np;

- if (ppc_md.progress)
- ppc_md.progress("holly_setup_arch():set_bridge", 0);
+ ppc_md_call_cond(progress)("holly_setup_arch():set_bridge", 0);

/* setup PCI host bridge */
holly_remap_bridge();
@@ -122,9 +121,8 @@ static void __init holly_init_pci(void)
if (np)
tsi108_setup_pci(np, HOLLY_PCI_CFG_PHYS, 1);

- ppc_md.pci_exclude_device = holly_exclude_device;
- if (ppc_md.progress)
- ppc_md.progress("tsi108: resources set", 0x100);
+ ppc_md_update(pci_exclude_device, holly_exclude_device);
+ ppc_md_call_cond(progress)("tsi108: resources set", 0x100);
}

static void __init holly_setup_arch(void)
diff --git a/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c b/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
index 9eb9abb5bce2..f833624a8532 100644
--- a/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
+++ b/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
@@ -62,16 +62,15 @@ static void __init mpc7448_hpc2_setup_pci(void)
{
#ifdef CONFIG_PCI
struct device_node *np;
- if (ppc_md.progress)
- ppc_md.progress("mpc7448_hpc2_setup_pci():set_bridge", 0);
+
+ ppc_md_call_cond(progress)("mpc7448_hpc2_setup_pci():set_bridge", 0);

/* setup PCI host bridge */
for_each_compatible_node(np, "pci", "tsi108-pci")
tsi108_setup_pci(np, MPC7448HPC2_PCI_CFG_PHYS, 0);

- ppc_md.pci_exclude_device = mpc7448_hpc2_exclude_device;
- if (ppc_md.progress)
- ppc_md.progress("tsi108: resources set", 0x100);
+ ppc_md_update(pci_exclude_device, mpc7448_hpc2_exclude_device);
+ ppc_md_call_cond(progress)("tsi108: resources set", 0x100);
#endif
}

diff --git a/arch/powerpc/platforms/embedded6xx/mvme5100.c b/arch/powerpc/platforms/embedded6xx/mvme5100.c
index c06a0490d157..04a98cb1c53c 100644
--- a/arch/powerpc/platforms/embedded6xx/mvme5100.c
+++ b/arch/powerpc/platforms/embedded6xx/mvme5100.c
@@ -154,8 +154,7 @@ static const struct of_device_id mvme5100_of_bus_ids[] __initconst = {
*/
static void __init mvme5100_setup_arch(void)
{
- if (ppc_md.progress)
- ppc_md.progress("mvme5100_setup_arch()", 0);
+ ppc_md_call_cond(progress)("mvme5100_setup_arch()", 0);

restart = ioremap(BOARD_MODRST_REG, 4);
}
diff --git a/arch/powerpc/platforms/embedded6xx/wii.c b/arch/powerpc/platforms/embedded6xx/wii.c
index a802ef957d63..d8b005d7ef79 100644
--- a/arch/powerpc/platforms/embedded6xx/wii.c
+++ b/arch/powerpc/platforms/embedded6xx/wii.c
@@ -143,8 +143,7 @@ static void wii_power_off(void)

static void __noreturn wii_halt(void)
{
- if (ppc_md.restart)
- ppc_md.restart(NULL);
+ ppc_md_call_cond(restart)(NULL);
wii_spin();
}

diff --git a/arch/powerpc/platforms/maple/pci.c b/arch/powerpc/platforms/maple/pci.c
index 37875e478b3a..33a2ad465cfb 100644
--- a/arch/powerpc/platforms/maple/pci.c
+++ b/arch/powerpc/platforms/maple/pci.c
@@ -623,7 +623,7 @@ void __init maple_pci_init(void)
if (ht && maple_add_bridge(ht) != 0)
of_node_put(ht);

- ppc_md.pcibios_root_bridge_prepare = maple_pci_root_bridge_prepare;
+ ppc_md_update(pcibios_root_bridge_prepare, maple_pci_root_bridge_prepare);

/* Tell pci.c to not change any resource allocations. */
pci_add_flags(PCI_PROBE_ONLY);
diff --git a/arch/powerpc/platforms/maple/setup.c b/arch/powerpc/platforms/maple/setup.c
index 4e9ad5bf3efb..a60aaa13b265 100644
--- a/arch/powerpc/platforms/maple/setup.c
+++ b/arch/powerpc/platforms/maple/setup.c
@@ -164,9 +164,9 @@ static void __init maple_use_rtas_reboot_and_halt_if_present(void)
{
if (rtas_service_present("system-reboot") &&
rtas_service_present("power-off")) {
- ppc_md.restart = rtas_restart;
+ ppc_md_update(restart, rtas_restart);
pm_power_off = rtas_power_off;
- ppc_md.halt = rtas_halt;
+ ppc_md_update(halt, rtas_halt);
}
}

@@ -260,7 +260,7 @@ static void __init maple_init_IRQ(void)

/* All ISUs are setup, complete initialization */
mpic_init(mpic);
- ppc_md.get_irq = mpic_get_irq;
+ ppc_md_update(get_irq, mpic_get_irq);
of_node_put(mpic_node);
of_node_put(root);
}
diff --git a/arch/powerpc/platforms/microwatt/rng.c b/arch/powerpc/platforms/microwatt/rng.c
index 3d8ee6eb7dad..acc3034565f1 100644
--- a/arch/powerpc/platforms/microwatt/rng.c
+++ b/arch/powerpc/platforms/microwatt/rng.c
@@ -36,7 +36,7 @@ static __init int rng_init(void)

for (i = 0; i < 10; i++) {
if (microwatt_get_random_darn(&val)) {
- ppc_md.get_random_seed = microwatt_get_random_darn;
+ ppc_md_update(get_random_seed, microwatt_get_random_darn);
return 0;
}
}
diff --git a/arch/powerpc/platforms/pasemi/idle.c b/arch/powerpc/platforms/pasemi/idle.c
index 6087c70ed2ef..676fdec607b1 100644
--- a/arch/powerpc/platforms/pasemi/idle.c
+++ b/arch/powerpc/platforms/pasemi/idle.c
@@ -70,8 +70,8 @@ static int __init pasemi_idle_init(void)
current_mode = 0;
#endif

- ppc_md.system_reset_exception = pasemi_system_reset_exception;
- ppc_md.power_save = modes[current_mode].entry;
+ ppc_md_update(system_reset_exception, pasemi_system_reset_exception);
+ ppc_md_update(power_save, modes[current_mode].entry);
pr_info("Using PA6T idle loop (%s)\n", modes[current_mode].name);

return 0;
diff --git a/arch/powerpc/platforms/powermac/nvram.c b/arch/powerpc/platforms/powermac/nvram.c
index 853ccc4480e2..2e8224f61743 100644
--- a/arch/powerpc/platforms/powermac/nvram.c
+++ b/arch/powerpc/platforms/powermac/nvram.c
@@ -449,7 +449,7 @@ static void __init lookup_partitions(void)
buffer[16] = 0;
do {
for (i=0;i<16;i++)
- buffer[i] = ppc_md.nvram_read_val(offset+i);
+ buffer[i] = ppc_md_call(nvram_read_val)(offset+i);
if (!strcmp(hdr->name, "common"))
nvram_partitions[pmac_nvram_OF] = offset + 0x10;
if (!strcmp(hdr->name, "APL,MacOS75")) {
@@ -533,13 +533,13 @@ static int __init core99_nvram_setup(struct device_node *dp, unsigned long addr)
for (i=0; i<NVRAM_SIZE; i++)
nvram_image[i] = nvram_data[i + core99_bank*NVRAM_SIZE];

- ppc_md.nvram_read_val = core99_nvram_read_byte;
- ppc_md.nvram_write_val = core99_nvram_write_byte;
- ppc_md.nvram_read = core99_nvram_read;
- ppc_md.nvram_write = core99_nvram_write;
- ppc_md.nvram_size = core99_nvram_size;
- ppc_md.nvram_sync = core99_nvram_sync;
- ppc_md.machine_shutdown = core99_nvram_sync;
+ ppc_md_update(nvram_read_val, core99_nvram_read_byte);
+ ppc_md_update(nvram_write_val, core99_nvram_write_byte);
+ ppc_md_update(nvram_read, core99_nvram_read);
+ ppc_md_update(nvram_write, core99_nvram_write);
+ ppc_md_update(nvram_size, core99_nvram_size);
+ ppc_md_update(nvram_sync, core99_nvram_sync);
+ ppc_md_update(machine_shutdown, core99_nvram_sync);
/*
* Maybe we could be smarter here though making an exclusive list
* of known flash chips is a bit nasty as older OF didn't provide us
@@ -592,27 +592,27 @@ int __init pmac_nvram_init(void)
if (machine_is(chrp) && nvram_naddrs == 1) {
nvram_data = ioremap(r1.start, s1);
nvram_mult = 1;
- ppc_md.nvram_read_val = direct_nvram_read_byte;
- ppc_md.nvram_write_val = direct_nvram_write_byte;
- ppc_md.nvram_size = ppc32_nvram_size;
+ ppc_md_update(nvram_read_val, direct_nvram_read_byte);
+ ppc_md_update(nvram_write_val, direct_nvram_write_byte);
+ ppc_md_update(nvram_size, ppc32_nvram_size);
} else if (nvram_naddrs == 1) {
nvram_data = ioremap(r1.start, s1);
nvram_mult = (s1 + NVRAM_SIZE - 1) / NVRAM_SIZE;
- ppc_md.nvram_read_val = direct_nvram_read_byte;
- ppc_md.nvram_write_val = direct_nvram_write_byte;
- ppc_md.nvram_size = ppc32_nvram_size;
+ ppc_md_update(nvram_read_val, direct_nvram_read_byte);
+ ppc_md_update(nvram_write_val, direct_nvram_write_byte);
+ ppc_md_update(nvram_size, ppc32_nvram_size);
} else if (nvram_naddrs == 2) {
nvram_addr = ioremap(r1.start, s1);
nvram_data = ioremap(r2.start, s2);
- ppc_md.nvram_read_val = indirect_nvram_read_byte;
- ppc_md.nvram_write_val = indirect_nvram_write_byte;
- ppc_md.nvram_size = ppc32_nvram_size;
+ ppc_md_update(nvram_read_val, indirect_nvram_read_byte);
+ ppc_md_update(nvram_write_val, indirect_nvram_write_byte);
+ ppc_md_update(nvram_size, ppc32_nvram_size);
} else if (nvram_naddrs == 0 && sys_ctrler == SYS_CTRLER_PMU) {
#ifdef CONFIG_ADB_PMU
nvram_naddrs = -1;
- ppc_md.nvram_read_val = pmu_nvram_read_byte;
- ppc_md.nvram_write_val = pmu_nvram_write_byte;
- ppc_md.nvram_size = ppc32_nvram_size;
+ ppc_md_update(nvram_read_val, pmu_nvram_read_byte);
+ ppc_md_update(nvram_write_val, pmu_nvram_write_byte);
+ ppc_md_update(nvram_size, ppc32_nvram_size);
#endif /* CONFIG_ADB_PMU */
} else {
printk(KERN_ERR "Incompatible type of NVRAM\n");
@@ -638,7 +638,7 @@ u8 pmac_xpram_read(int xpaddr)
if (offset < 0 || xpaddr < 0 || xpaddr > 0x100)
return 0xff;

- return ppc_md.nvram_read_val(xpaddr + offset);
+ return ppc_md_call(nvram_read_val)(xpaddr + offset);
}

void pmac_xpram_write(int xpaddr, u8 data)
@@ -648,7 +648,7 @@ void pmac_xpram_write(int xpaddr, u8 data)
if (offset < 0 || xpaddr < 0 || xpaddr > 0x100)
return;

- ppc_md.nvram_write_val(xpaddr + offset, data);
+ ppc_md_call(nvram_write_val)(xpaddr + offset, data);
}

EXPORT_SYMBOL(pmac_get_partition);
diff --git a/arch/powerpc/platforms/powermac/pci.c b/arch/powerpc/platforms/powermac/pci.c
index e9abe0f2e7f0..b597e7bcb83b 100644
--- a/arch/powerpc/platforms/powermac/pci.c
+++ b/arch/powerpc/platforms/powermac/pci.c
@@ -933,7 +933,7 @@ void __init pmac_pci_init(void)
if (ht && pmac_add_bridge(ht) != 0)
of_node_put(ht);

- ppc_md.pcibios_root_bridge_prepare = pmac_pci_root_bridge_prepare;
+ ppc_md_update(pcibios_root_bridge_prepare, pmac_pci_root_bridge_prepare);
/* pmac_check_ht_link(); */

#else /* CONFIG_PPC64 */
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c
index 4921bccf0376..4fee59f5fcf4 100644
--- a/arch/powerpc/platforms/powermac/pic.c
+++ b/arch/powerpc/platforms/powermac/pic.c
@@ -286,7 +286,7 @@ static void __init pmac_pic_probe_oldstyle(void)
struct resource r;

/* Set our get_irq function */
- ppc_md.get_irq = pmac_pic_get_irq;
+ ppc_md_update(get_irq, pmac_pic_get_irq);

/*
* Find the interrupt controller type & node
@@ -497,7 +497,7 @@ static int __init pmac_pic_probe_mpic(void)
return -ENODEV;

/* Set master handler */
- ppc_md.get_irq = mpic_get_irq;
+ ppc_md_update(get_irq, mpic_get_irq);

/* Setup master */
mpic1 = pmac_setup_one_mpic(master, 1);
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c
index 3256a316e884..ed449573b0b0 100644
--- a/arch/powerpc/platforms/powermac/smp.c
+++ b/arch/powerpc/platforms/powermac/smp.c
@@ -246,7 +246,7 @@ static void __init psurge_quad_init(void)
{
int procbits;

- if (ppc_md.progress) ppc_md.progress("psurge_quad_init", 0x351);
+ ppc_md_call_cond(progress)("psurge_quad_init", 0x351);
procbits = ~PSURGE_QUAD_IN(PSURGE_QUAD_WHICH_CPU);
if (psurge_type == PSURGE_QUAD_ICEGRASS)
PSURGE_QUAD_BIS(PSURGE_QUAD_RESET_CTL, procbits);
@@ -325,7 +325,7 @@ static void __init smp_psurge_probe(void)
for (i = 1; i < ncpus ; ++i)
set_cpu_present(i, true);

- if (ppc_md.progress) ppc_md.progress("smp_psurge_probe - done", 0x352);
+ ppc_md_call_cond(progress)("smp_psurge_probe - done", 0x352);
}

static int __init smp_psurge_kick_cpu(int nr)
@@ -345,7 +345,7 @@ static int __init smp_psurge_kick_cpu(int nr)
asm volatile("dcbf 0,%0" : : "r" (a) : "memory");
asm volatile("sync");

- if (ppc_md.progress) ppc_md.progress("smp_psurge_kick_cpu", 0x353);
+ ppc_md_call_cond(progress)("smp_psurge_kick_cpu", 0x353);

/* This is going to freeze the timeebase, we disable interrupts */
local_irq_save(flags);
@@ -392,7 +392,7 @@ static int __init smp_psurge_kick_cpu(int nr)
if (psurge_type == PSURGE_DUAL)
psurge_set_ipi(1);

- if (ppc_md.progress) ppc_md.progress("smp_psurge_kick_cpu - done", 0x354);
+ ppc_md_call_cond(progress)("smp_psurge_kick_cpu - done", 0x354);

return 0;
}
@@ -762,7 +762,7 @@ static void __init smp_core99_probe(void)
struct device_node *cpus;
int ncpus = 0;

- if (ppc_md.progress) ppc_md.progress("smp_core99_probe", 0x345);
+ ppc_md_call_cond(progress)("smp_core99_probe", 0x345);

/* Count CPUs in the device-tree */
for_each_node_by_type(cpus, "cpu")
@@ -799,8 +799,7 @@ static int smp_core99_kick_cpu(int nr)
if (nr < 0 || nr > 3)
return -ENOENT;

- if (ppc_md.progress)
- ppc_md.progress("smp_core99_kick_cpu", 0x346);
+ ppc_md_call_cond(progress)("smp_core99_kick_cpu", 0x346);

local_irq_save(flags);

@@ -827,7 +826,7 @@ static int smp_core99_kick_cpu(int nr)
patch_instruction(vector, ppc_inst(save_vector));

local_irq_restore(flags);
- if (ppc_md.progress) ppc_md.progress("smp_core99_kick_cpu done", 0x347);
+ ppc_md_call_cond(progress)("smp_core99_kick_cpu done", 0x347);

return 0;
}
@@ -897,8 +896,7 @@ static void __init smp_core99_bringup_done(void)
smp_core99_cpu_online, NULL);
#endif

- if (ppc_md.progress)
- ppc_md.progress("smp_core99_bringup_done", 0x349);
+ ppc_md_call_cond(progress)("smp_core99_bringup_done", 0x349);
}
#endif /* CONFIG_PPC64 */

diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c
index 89e22c460ebf..6f76442faf77 100644
--- a/arch/powerpc/platforms/powernv/eeh-powernv.c
+++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
@@ -1701,7 +1701,7 @@ static int __init eeh_powernv_init(void)
* size needs to be set before calling eeh_init().
*/
eeh_set_pe_aux_size(max_diag_size);
- ppc_md.pcibios_bus_add_device = pnv_pcibios_bus_add_device;
+ ppc_md_update(pcibios_bus_add_device, pnv_pcibios_bus_add_device);

ret = eeh_init(&pnv_eeh_ops);
if (!ret)
diff --git a/arch/powerpc/platforms/powernv/idle.c b/arch/powerpc/platforms/powernv/idle.c
index e3ffdc8e8567..5568dd112b46 100644
--- a/arch/powerpc/platforms/powernv/idle.c
+++ b/arch/powerpc/platforms/powernv/idle.c
@@ -1244,7 +1244,7 @@ static void __init pnv_arch300_idle_init(void)
if (unlikely(!default_stop_found)) {
pr_warn("cpuidle-powernv: No suitable default stop state found. Disabling platform idle.\n");
} else {
- ppc_md.power_save = arch300_idle;
+ ppc_md_update(power_save, arch300_idle);
pr_info("cpuidle-powernv: Default stop: psscr = 0x%016llx,mask=0x%016llx\n",
pnv_default_stop_val, pnv_default_stop_mask);
}
@@ -1478,7 +1478,7 @@ static int __init pnv_init_idle_states(void)
update_subcore_sibling_mask();

if (supported_cpuidle_states & OPAL_PM_NAP_ENABLED) {
- ppc_md.power_save = power7_idle;
+ ppc_md_update(power_save, power7_idle);
power7_offline_type = PNV_THREAD_NAP;
}

diff --git a/arch/powerpc/platforms/powernv/opal-nvram.c b/arch/powerpc/platforms/powernv/opal-nvram.c
index 380bc2d7ebbf..22ef9a07ab52 100644
--- a/arch/powerpc/platforms/powernv/opal-nvram.c
+++ b/arch/powerpc/platforms/powernv/opal-nvram.c
@@ -106,8 +106,8 @@ void __init opal_nvram_init(void)
pr_info("OPAL nvram setup, %u bytes\n", nvram_size);
of_node_put(np);

- ppc_md.nvram_read = opal_nvram_read;
- ppc_md.nvram_write = opal_nvram_write;
- ppc_md.nvram_size = opal_nvram_size;
+ ppc_md_update(nvram_read, opal_nvram_read);
+ ppc_md_update(nvram_write, opal_nvram_write);
+ ppc_md_update(nvram_size, opal_nvram_size);
}

diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 3dd35c327d1c..2ecda9e0abd7 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -3160,7 +3160,7 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np,
* for the P2P bridge bars so that each PCI bus (excluding
* the child P2P bridges) can form individual PE.
*/
- ppc_md.pcibios_fixup = pnv_pci_ioda_fixup;
+ ppc_md_update(pcibios_fixup, pnv_pci_ioda_fixup);

switch (phb->type) {
case PNV_PHB_NPU_OCAPI:
@@ -3170,13 +3170,13 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np,
hose->controller_ops = pnv_pci_ioda_controller_ops;
}

- ppc_md.pcibios_default_alignment = pnv_pci_default_alignment;
+ ppc_md_update(pcibios_default_alignment, pnv_pci_default_alignment);

#ifdef CONFIG_PCI_IOV
- ppc_md.pcibios_fixup_sriov = pnv_pci_ioda_fixup_iov;
- ppc_md.pcibios_iov_resource_alignment = pnv_pci_iov_resource_alignment;
- ppc_md.pcibios_sriov_enable = pnv_pcibios_sriov_enable;
- ppc_md.pcibios_sriov_disable = pnv_pcibios_sriov_disable;
+ ppc_md_update(pcibios_fixup_sriov, pnv_pci_ioda_fixup_iov);
+ ppc_md_update(pcibios_iov_resource_alignment, pnv_pci_iov_resource_alignment);
+ ppc_md_update(pcibios_sriov_enable, pnv_pcibios_sriov_enable);
+ ppc_md_update(pcibios_sriov_disable, pnv_pcibios_sriov_disable);
#endif

pci_add_flags(PCI_REASSIGN_ALL_RSRC);
diff --git a/arch/powerpc/platforms/powernv/rng.c b/arch/powerpc/platforms/powernv/rng.c
index 72c25295c1c2..cf8235f8263b 100644
--- a/arch/powerpc/platforms/powernv/rng.c
+++ b/arch/powerpc/platforms/powernv/rng.c
@@ -90,7 +90,7 @@ static int initialise_darn(void)

for (i = 0; i < 10; i++) {
if (powernv_get_random_darn(&val)) {
- ppc_md.get_random_seed = powernv_get_random_darn;
+ ppc_md_update(get_random_seed, powernv_get_random_darn);
return 0;
}
}
@@ -161,7 +161,7 @@ static __init int rng_create(struct device_node *dn)

pr_info_once("Registering arch random hook.\n");

- ppc_md.get_random_seed = powernv_get_random_long;
+ ppc_md_update(get_random_seed, powernv_get_random_long);

return 0;
}
diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c
index a8db3f153063..6f6ceef2a9f5 100644
--- a/arch/powerpc/platforms/powernv/setup.c
+++ b/arch/powerpc/platforms/powernv/setup.c
@@ -227,7 +227,7 @@ static void __init pnv_init_IRQ(void)
if (!xive_native_init())
xics_init();

- WARN_ON(!ppc_md.get_irq);
+ WARN_ON(!ppc_md_has(get_irq));
}

static void pnv_show_cpuinfo(struct seq_file *m)
@@ -457,18 +457,18 @@ static unsigned long pnv_memory_block_size(void)

static void __init pnv_setup_machdep_opal(void)
{
- ppc_md.get_boot_time = opal_get_boot_time;
- ppc_md.restart = pnv_restart;
+ ppc_md_update(get_boot_time, opal_get_boot_time);
+ ppc_md_update(restart, pnv_restart);
pm_power_off = pnv_power_off;
- ppc_md.halt = pnv_halt;
+ ppc_md_update(halt, pnv_halt);
/* ppc_md.system_reset_exception gets filled in by pnv_smp_init() */
- ppc_md.machine_check_exception = opal_machine_check;
- ppc_md.mce_check_early_recovery = opal_mce_check_early_recovery;
+ ppc_md_update(machine_check_exception, opal_machine_check);
+ ppc_md_update(mce_check_early_recovery, opal_mce_check_early_recovery);
if (opal_check_token(OPAL_HANDLE_HMI2))
- ppc_md.hmi_exception_early = opal_hmi_exception_early2;
+ ppc_md_update(hmi_exception_early, opal_hmi_exception_early2);
else
- ppc_md.hmi_exception_early = opal_hmi_exception_early;
- ppc_md.handle_hmi_exception = opal_handle_hmi_exception;
+ ppc_md_update(hmi_exception_early, opal_hmi_exception_early);
+ ppc_md_update(handle_hmi_exception, opal_handle_hmi_exception);
}

static int __init pnv_probe(void)
diff --git a/arch/powerpc/platforms/powernv/smp.c b/arch/powerpc/platforms/powernv/smp.c
index cbb67813cd5d..0611e68a7b78 100644
--- a/arch/powerpc/platforms/powernv/smp.c
+++ b/arch/powerpc/platforms/powernv/smp.c
@@ -428,7 +428,7 @@ static struct smp_ops_t pnv_smp_ops = {
void __init pnv_smp_init(void)
{
if (opal_check_token(OPAL_SIGNAL_SYSTEM_RESET)) {
- ppc_md.system_reset_exception = pnv_system_reset_exception;
+ ppc_md_update(system_reset_exception, pnv_system_reset_exception);
pnv_smp_ops.cause_nmi_ipi = pnv_cause_nmi_ipi;
}
smp_ops = &pnv_smp_ops;
diff --git a/arch/powerpc/platforms/ps3/interrupt.c b/arch/powerpc/platforms/ps3/interrupt.c
index 49871427f599..8c3c65e89e39 100644
--- a/arch/powerpc/platforms/ps3/interrupt.c
+++ b/arch/powerpc/platforms/ps3/interrupt.c
@@ -766,7 +766,7 @@ void __init ps3_init_IRQ(void)
ps3_result(result));
}

- ppc_md.get_irq = ps3_get_irq;
+ ppc_md_update(get_irq, ps3_get_irq);
}

void ps3_shutdown_IRQ(int cpu)
diff --git a/arch/powerpc/platforms/ps3/setup.c b/arch/powerpc/platforms/ps3/setup.c
index 3de9145c20bc..04c037ec8b79 100644
--- a/arch/powerpc/platforms/ps3/setup.c
+++ b/arch/powerpc/platforms/ps3/setup.c
@@ -240,7 +240,7 @@ static void __init ps3_setup_arch(void)
prealloc_ps3fb_videomemory();
prealloc_ps3flash_bounce_buffer();

- ppc_md.power_save = ps3_power_save;
+ ppc_md_update(power_save, ps3_power_save);
ps3_os_area_init();

DBG(" <- %s:%d\n", __func__, __LINE__);
diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/platforms/pseries/eeh_pseries.c
index bc15200852b7..65efa26e0514 100644
--- a/arch/powerpc/platforms/pseries/eeh_pseries.c
+++ b/arch/powerpc/platforms/pseries/eeh_pseries.c
@@ -862,7 +862,7 @@ static int __init eeh_pseries_init(void)
eeh_add_flag(EEH_PROBE_MODE_DEVTREE | EEH_ENABLE_IO_FOR_LOG);

/* Set EEH machine dependent code */
- ppc_md.pcibios_bus_add_device = pseries_pcibios_bus_add_device;
+ ppc_md_update(pcibios_bus_add_device, pseries_pcibios_bus_add_device);

if (is_kdump_kernel() || reset_devices) {
pr_info("Issue PHB reset ...\n");
diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c
index d646c22e94ab..a889cd995369 100644
--- a/arch/powerpc/platforms/pseries/hotplug-cpu.c
+++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c
@@ -995,8 +995,8 @@ static int __init pseries_cpu_hotplug_init(void)
unsigned int node;

#ifdef CONFIG_ARCH_CPU_PROBE_RELEASE
- ppc_md.cpu_probe = dlpar_cpu_probe;
- ppc_md.cpu_release = dlpar_cpu_release;
+ ppc_md_update(cpu_probe, dlpar_cpu_probe);
+ ppc_md_update(cpu_release, dlpar_cpu_release);
#endif /* CONFIG_ARCH_CPU_PROBE_RELEASE */

rtas_stop_self_token = rtas_token("stop-self");
diff --git a/arch/powerpc/platforms/pseries/msi.c b/arch/powerpc/platforms/pseries/msi.c
index 1b305e411862..0d0d57096a7e 100644
--- a/arch/powerpc/platforms/pseries/msi.c
+++ b/arch/powerpc/platforms/pseries/msi.c
@@ -695,8 +695,8 @@ static int rtas_msi_init(void)

pr_debug("rtas_msi: Registering RTAS MSI callbacks.\n");

- WARN_ON(ppc_md.pci_irq_fixup);
- ppc_md.pci_irq_fixup = rtas_msi_pci_irq_fixup;
+ WARN_ON(ppc_md_has(pci_irq_fixup));
+ ppc_md_update(pci_irq_fixup, rtas_msi_pci_irq_fixup);

return 0;
}
diff --git a/arch/powerpc/platforms/pseries/nvram.c b/arch/powerpc/platforms/pseries/nvram.c
index 69db2eca367f..673a58274616 100644
--- a/arch/powerpc/platforms/pseries/nvram.c
+++ b/arch/powerpc/platforms/pseries/nvram.c
@@ -170,7 +170,7 @@ int nvram_clear_error_log(void)

tmp_index = rtas_log_partition.index;

- rc = ppc_md.nvram_write((char *)&clear_word, sizeof(int), &tmp_index);
+ rc = ppc_md_call(nvram_write)((char *)&clear_word, sizeof(int), &tmp_index);
if (rc <= 0) {
printk(KERN_ERR "nvram_clear_error_log: Failed nvram_write (%d)\n", rc);
return rc;
@@ -232,9 +232,9 @@ int __init pSeries_nvram_init(void)
printk(KERN_INFO "PPC64 nvram contains %d bytes\n", nvram_size);
of_node_put(nvram);

- ppc_md.nvram_read = pSeries_nvram_read;
- ppc_md.nvram_write = pSeries_nvram_write;
- ppc_md.nvram_size = pSeries_nvram_get_size;
+ ppc_md_update(nvram_read, pSeries_nvram_read);
+ ppc_md_update(nvram_write, pSeries_nvram_write);
+ ppc_md_update(nvram_size, pSeries_nvram_get_size);

return 0;
}
diff --git a/arch/powerpc/platforms/pseries/pci.c b/arch/powerpc/platforms/pseries/pci.c
index 3b6800f774c2..fcdc7bbeb9c6 100644
--- a/arch/powerpc/platforms/pseries/pci.c
+++ b/arch/powerpc/platforms/pseries/pci.c
@@ -229,8 +229,8 @@ void __init pSeries_final_fixup(void)
eeh_show_enabled();

#ifdef CONFIG_PCI_IOV
- ppc_md.pcibios_sriov_enable = pseries_pcibios_sriov_enable;
- ppc_md.pcibios_sriov_disable = pseries_pcibios_sriov_disable;
+ ppc_md_update(pcibios_sriov_enable, pseries_pcibios_sriov_enable);
+ ppc_md_update(pcibios_sriov_disable, pseries_pcibios_sriov_disable);
#endif
}

diff --git a/arch/powerpc/platforms/pseries/rng.c b/arch/powerpc/platforms/pseries/rng.c
index 6268545947b8..04874f763cf1 100644
--- a/arch/powerpc/platforms/pseries/rng.c
+++ b/arch/powerpc/platforms/pseries/rng.c
@@ -34,7 +34,7 @@ static __init int rng_init(void)

pr_info("Registering arch random hook.\n");

- ppc_md.get_random_seed = pseries_get_random_long;
+ ppc_md_update(get_random_seed, pseries_get_random_long);

of_node_put(dn);
return 0;
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index f79126f16258..e14abc326a49 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -459,7 +459,7 @@ void pseries_little_endian_exceptions(void)
mdelay(get_longbusy_msecs(rc));
}
if (rc) {
- ppc_md.progress("H_SET_MODE LE exception fail", 0);
+ ppc_md_call(progress)("H_SET_MODE LE exception fail", 0);
panic("Could not enable little endian exceptions");
}
}
@@ -821,22 +821,19 @@ static void __init pSeries_setup_arch(void)
pv_spinlocks_init();
}

- ppc_md.power_save = pseries_lpar_idle;
- ppc_md.enable_pmcs = pseries_lpar_enable_pmcs;
+ ppc_md_update(power_save, pseries_lpar_idle);
+ ppc_md_update(enable_pmcs, pseries_lpar_enable_pmcs);
#ifdef CONFIG_PCI_IOV
- ppc_md.pcibios_fixup_resources =
- pseries_pci_fixup_resources;
- ppc_md.pcibios_fixup_sriov =
- pseries_pci_fixup_iov_resources;
- ppc_md.pcibios_iov_resource_alignment =
- pseries_pci_iov_resource_alignment;
+ ppc_md_update(pcibios_fixup_resources, pseries_pci_fixup_resources);
+ ppc_md_update(pcibios_fixup_sriov, pseries_pci_fixup_iov_resources);
+ ppc_md_update(pcibios_iov_resource_alignment, pseries_pci_iov_resource_alignment);
#endif
} else {
/* No special idle routine */
- ppc_md.enable_pmcs = power4_enable_pmcs;
+ ppc_md_update(enable_pmcs, power4_enable_pmcs);
}

- ppc_md.pcibios_root_bridge_prepare = pseries_root_bridge_prepare;
+ ppc_md_update(pcibios_root_bridge_prepare, pseries_root_bridge_prepare);

if (swiotlb_force == SWIOTLB_FORCE)
ppc_swiotlb_enable = 1;
@@ -852,11 +849,11 @@ static int __init pSeries_init_panel(void)
{
/* Manually leave the kernel version on the panel. */
#ifdef __BIG_ENDIAN__
- ppc_md.progress("Linux ppc64\n", 0);
+ ppc_md_call(progress)("Linux ppc64\n", 0);
#else
- ppc_md.progress("Linux ppc64le\n", 0);
+ ppc_md_call(progress)("Linux ppc64le\n", 0);
#endif
- ppc_md.progress(init_utsname()->version, 0);
+ ppc_md_call(progress)(init_utsname()->version, 0);

return 0;
}
@@ -991,12 +988,12 @@ static void __init pseries_init(void)
hvc_vio_init_early();
#endif
if (firmware_has_feature(FW_FEATURE_XDABR))
- ppc_md.set_dabr = pseries_set_xdabr;
+ ppc_md_update(set_dabr, pseries_set_xdabr);
else if (firmware_has_feature(FW_FEATURE_DABR))
- ppc_md.set_dabr = pseries_set_dabr;
+ ppc_md_update(set_dabr, pseries_set_dabr);

if (firmware_has_feature(FW_FEATURE_SET_MODE))
- ppc_md.set_dawr = pseries_set_dawr;
+ ppc_md_update(set_dawr, pseries_set_dawr);

pSeries_cmo_feature_init();
iommu_init_early_pSeries();
diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c
index 1d33b7a5ea83..0447a5aa3764 100644
--- a/arch/powerpc/sysdev/dart_iommu.c
+++ b/arch/powerpc/sysdev/dart_iommu.c
@@ -433,7 +433,7 @@ static int __init iommu_init_late_dart(void)
if (!dart_tablebase)
return 0;

- ppc_md.iommu_restore = iommu_dart_restore;
+ ppc_md_update(iommu_restore, iommu_dart_restore);

return 0;
}
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index b8f76f3fd994..5e1ec461701c 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -396,7 +396,7 @@ static void setup_pci_atmu(struct pci_controller *hose)
* install our own dma_set_mask handler to fixup dma_ops
* and dma_offset
*/
- ppc_md.dma_set_mask = fsl_pci_dma_set_mask;
+ ppc_md_update(dma_set_mask, fsl_pci_dma_set_mask);

pr_info("%pOF: Setup 64-bit PCI DMA window\n", hose->dn);
}
@@ -692,8 +692,8 @@ static int mpc83xx_pcie_exclude_device(struct pci_bus *bus, unsigned int devfn)
return PCIBIOS_DEVICE_NOT_FOUND;
}

- if (ppc_md.pci_exclude_device) {
- if (ppc_md.pci_exclude_device(hose, bus->number, devfn))
+ if (ppc_md_has(pci_exclude_device)) {
+ if (ppc_md_call(pci_exclude_device)(hose, bus->number, devfn))
return PCIBIOS_DEVICE_NOT_FOUND;
}

diff --git a/arch/powerpc/sysdev/indirect_pci.c b/arch/powerpc/sysdev/indirect_pci.c
index 09b36617425e..e1cb1a61e676 100644
--- a/arch/powerpc/sysdev/indirect_pci.c
+++ b/arch/powerpc/sysdev/indirect_pci.c
@@ -31,8 +31,8 @@ int __indirect_read_config(struct pci_controller *hose,
return PCIBIOS_DEVICE_NOT_FOUND;
}

- if (ppc_md.pci_exclude_device)
- if (ppc_md.pci_exclude_device(hose, bus_number, devfn))
+ if (ppc_md_has(pci_exclude_device))
+ if (ppc_md_call(pci_exclude_device)(hose, bus_number, devfn))
return PCIBIOS_DEVICE_NOT_FOUND;

if (hose->indirect_type & PPC_INDIRECT_TYPE_SET_CFG_TYPE)
@@ -97,8 +97,8 @@ int indirect_write_config(struct pci_bus *bus, unsigned int devfn,
return PCIBIOS_DEVICE_NOT_FOUND;
}

- if (ppc_md.pci_exclude_device)
- if (ppc_md.pci_exclude_device(hose, bus->number, devfn))
+ if (ppc_md_has(pci_exclude_device))
+ if (ppc_md_call(pci_exclude_device)(hose, bus->number, devfn))
return PCIBIOS_DEVICE_NOT_FOUND;

if (hose->indirect_type & PPC_INDIRECT_TYPE_SET_CFG_TYPE)
diff --git a/arch/powerpc/sysdev/mmio_nvram.c b/arch/powerpc/sysdev/mmio_nvram.c
index 628f9b759c84..f5130d7a7eb6 100644
--- a/arch/powerpc/sysdev/mmio_nvram.c
+++ b/arch/powerpc/sysdev/mmio_nvram.c
@@ -133,11 +133,11 @@ int __init mmio_nvram_init(void)
printk(KERN_INFO "mmio NVRAM, %luk at 0x%lx mapped to %p\n",
mmio_nvram_len >> 10, nvram_addr, mmio_nvram_start);

- ppc_md.nvram_read_val = mmio_nvram_read_val;
- ppc_md.nvram_write_val = mmio_nvram_write_val;
- ppc_md.nvram_read = mmio_nvram_read;
- ppc_md.nvram_write = mmio_nvram_write;
- ppc_md.nvram_size = mmio_nvram_get_size;
+ ppc_md_update(nvram_read_val, mmio_nvram_read_val);
+ ppc_md_update(nvram_write_val, mmio_nvram_write_val);
+ ppc_md_update(nvram_read, mmio_nvram_read);
+ ppc_md_update(nvram_write, mmio_nvram_write);
+ ppc_md_update(nvram_size, mmio_nvram_get_size);

out:
of_node_put(nvram_node);
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index 68ff5c87294e..42162fe915bc 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -1406,7 +1406,7 @@ struct mpic * __init mpic_alloc(struct device_node *node,
* fsl_version will be zero if MPIC_FSL is not set.
*/
if (fsl_version < 0x400 && (flags & MPIC_ENABLE_COREINT))
- ppc_md.get_irq = mpic_get_irq;
+ ppc_md_update(get_irq, mpic_get_irq);

/* Reset */

diff --git a/arch/powerpc/sysdev/tsi108_pci.c b/arch/powerpc/sysdev/tsi108_pci.c
index 042bb38fa5c2..d4cd7942b4a6 100644
--- a/arch/powerpc/sysdev/tsi108_pci.c
+++ b/arch/powerpc/sysdev/tsi108_pci.c
@@ -51,8 +51,8 @@ tsi108_direct_write_config(struct pci_bus *bus, unsigned int devfunc,
volatile unsigned char *cfg_addr;
struct pci_controller *hose = pci_bus_to_host(bus);

- if (ppc_md.pci_exclude_device)
- if (ppc_md.pci_exclude_device(hose, bus->number, devfunc))
+ if (ppc_md_has(pci_exclude_device))
+ if (ppc_md_call(pci_exclude_device)(hose, bus->number, devfunc))
return PCIBIOS_DEVICE_NOT_FOUND;

cfg_addr = (unsigned char *)(tsi_mk_config_addr(bus->number,
@@ -136,8 +136,8 @@ tsi108_direct_read_config(struct pci_bus *bus, unsigned int devfn, int offset,
struct pci_controller *hose = pci_bus_to_host(bus);
u32 temp;

- if (ppc_md.pci_exclude_device)
- if (ppc_md.pci_exclude_device(hose, bus->number, devfn))
+ if (ppc_md_has(pci_exclude_device))
+ if (ppc_md_call(pci_exclude_device)(hose, bus->number, devfn))
return PCIBIOS_DEVICE_NOT_FOUND;

cfg_addr = (unsigned char *)(tsi_mk_config_addr(bus->number,
diff --git a/arch/powerpc/sysdev/xics/xics-common.c b/arch/powerpc/sysdev/xics/xics-common.c
index 5c1a157a83b8..96b967ae39ce 100644
--- a/arch/powerpc/sysdev/xics/xics-common.c
+++ b/arch/powerpc/sysdev/xics/xics-common.c
@@ -520,7 +520,7 @@ void __init xics_init(void)
}

/* Copy get_irq callback over to ppc_md */
- ppc_md.get_irq = icp_ops->get_irq;
+ ppc_md_update(get_irq, icp_ops->get_irq);

/* Patch up IPI chip EOI */
xics_ipi_chip.irq_eoi = icp_ops->eoi;
diff --git a/arch/powerpc/sysdev/xive/common.c b/arch/powerpc/sysdev/xive/common.c
index c732ce5a3e1a..a3e30d729ad7 100644
--- a/arch/powerpc/sysdev/xive/common.c
+++ b/arch/powerpc/sysdev/xive/common.c
@@ -1647,7 +1647,7 @@ bool __init xive_core_init(struct device_node *np, const struct xive_ops *ops,
xive_ops = ops;
xive_irq_priority = max_prio;

- ppc_md.get_irq = xive_get_irq;
+ ppc_md_update(get_irq, xive_get_irq);
__xive_enabled = true;

pr_devel("Initializing host..\n");
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index dd8241c009e5..9bb66f2a2828 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -1239,9 +1239,9 @@ static void bootcmds(void)
cmd = inchar();
if (cmd == 'r') {
getstring(tmp, 64);
- ppc_md.restart(tmp);
+ ppc_md_call(restart)(tmp);
} else if (cmd == 'h') {
- ppc_md.halt();
+ ppc_md_call(halt)();
} else if (cmd == 'p') {
if (pm_power_off)
pm_power_off();
diff --git a/drivers/ata/pata_macio.c b/drivers/ata/pata_macio.c
index be0ca8d5b345..dff77e3819b4 100644
--- a/drivers/ata/pata_macio.c
+++ b/drivers/ata/pata_macio.c
@@ -752,19 +752,19 @@ static void pata_macio_reset_hw(struct pata_macio_priv *priv, int resume)
* (timing related ?). Until I can put my hand on one of these
* units, I keep the old way
*/
- ppc_md.feature_call(PMAC_FTR_IDE_ENABLE, priv->node, 0, 1);
+ ppc_md_call(feature_call)(PMAC_FTR_IDE_ENABLE, priv->node, 0, 1);
} else {
int rc;

/* Reset and enable controller */
- rc = ppc_md.feature_call(PMAC_FTR_IDE_RESET,
+ rc = ppc_md_call(feature_call)(PMAC_FTR_IDE_RESET,
priv->node, priv->aapl_bus_id, 1);
- ppc_md.feature_call(PMAC_FTR_IDE_ENABLE,
+ ppc_md_call(feature_call)(PMAC_FTR_IDE_ENABLE,
priv->node, priv->aapl_bus_id, 1);
msleep(10);
/* Only bother waiting if there's a reset control */
if (rc == 0) {
- ppc_md.feature_call(PMAC_FTR_IDE_RESET,
+ ppc_md_call(feature_call)(PMAC_FTR_IDE_RESET,
priv->node, priv->aapl_bus_id, 0);
msleep(IDE_WAKEUP_DELAY_MS);
}
@@ -889,7 +889,7 @@ static int pata_macio_do_suspend(struct pata_macio_priv *priv, pm_message_t mesg
}

/* Disable the bus on older machines and the cell on kauai */
- ppc_md.feature_call(PMAC_FTR_IDE_ENABLE, priv->node,
+ ppc_md_call(feature_call)(PMAC_FTR_IDE_ENABLE, priv->node,
priv->aapl_bus_id, 0);

return 0;
diff --git a/drivers/char/nvram.c b/drivers/char/nvram.c
index e9f694b36871..d4cca9daf007 100644
--- a/drivers/char/nvram.c
+++ b/drivers/char/nvram.c
@@ -310,9 +310,9 @@ static long nvram_misc_ioctl(struct file *file, unsigned int cmd,
break;
#ifdef CONFIG_PPC32
case IOC_NVRAM_SYNC:
- if (ppc_md.nvram_sync != NULL) {
+ if (ppc_md_has(nvram_sync)) {
mutex_lock(&nvram_mutex);
- ppc_md.nvram_sync();
+ ppc_md_call(nvram_sync)();
mutex_unlock(&nvram_mutex);
}
ret = 0;
diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c
index 4bdd4c45e7a7..b14ebc533bed 100644
--- a/drivers/macintosh/via-pmu.c
+++ b/drivers/macintosh/via-pmu.c
@@ -2346,8 +2346,8 @@ static int register_pmu_pm_ops(void)
{
if (pmu_kind == PMU_OHARE_BASED)
powerbook_sleep_init_3400();
- ppc_md.suspend_disable_irqs = pmac_suspend_disable_irqs;
- ppc_md.suspend_enable_irqs = pmac_suspend_enable_irqs;
+ ppc_md_update(suspend_disable_irqs, pmac_suspend_disable_irqs);
+ ppc_md_update(suspend_enable_irqs, pmac_suspend_enable_irqs);
suspend_set_ops(&pmu_pm_ops);

return 0;
diff --git a/include/linux/nvram.h b/include/linux/nvram.h
index d29d9c93a927..31d41811ea3e 100644
--- a/include/linux/nvram.h
+++ b/include/linux/nvram.h
@@ -46,8 +46,8 @@ extern const struct nvram_ops arch_nvram_ops;
static inline ssize_t nvram_get_size(void)
{
#ifdef CONFIG_PPC
- if (ppc_md.nvram_size)
- return ppc_md.nvram_size();
+ if (ppc_md_has(nvram_size))
+ return ppc_md_call(nvram_size)();
#else
if (arch_nvram_ops.get_size)
return arch_nvram_ops.get_size();
@@ -58,8 +58,8 @@ static inline ssize_t nvram_get_size(void)
static inline unsigned char nvram_read_byte(int addr)
{
#ifdef CONFIG_PPC
- if (ppc_md.nvram_read_val)
- return ppc_md.nvram_read_val(addr);
+ if (ppc_md_has(nvram_read_val))
+ return ppc_md_call(nvram_read_val)(addr);
#else
if (arch_nvram_ops.read_byte)
return arch_nvram_ops.read_byte(addr);
@@ -70,8 +70,7 @@ static inline unsigned char nvram_read_byte(int addr)
static inline void nvram_write_byte(unsigned char val, int addr)
{
#ifdef CONFIG_PPC
- if (ppc_md.nvram_write_val)
- ppc_md.nvram_write_val(addr, val);
+ ppc_md_call_cond(nvram_write_val)(addr, val);
#else
if (arch_nvram_ops.write_byte)
arch_nvram_ops.write_byte(val, addr);
@@ -109,8 +108,8 @@ static inline ssize_t nvram_write_bytes(char *buf, size_t count, loff_t *ppos)
static inline ssize_t nvram_read(char *buf, size_t count, loff_t *ppos)
{
#ifdef CONFIG_PPC
- if (ppc_md.nvram_read)
- return ppc_md.nvram_read(buf, count, ppos);
+ if (ppc_md_has(nvram_read))
+ return ppc_md_call(nvram_read)(buf, count, ppos);
#else
if (arch_nvram_ops.read)
return arch_nvram_ops.read(buf, count, ppos);
@@ -121,8 +120,8 @@ static inline ssize_t nvram_read(char *buf, size_t count, loff_t *ppos)
static inline ssize_t nvram_write(char *buf, size_t count, loff_t *ppos)
{
#ifdef CONFIG_PPC
- if (ppc_md.nvram_write)
- return ppc_md.nvram_write(buf, count, ppos);
+ if (ppc_md_has(nvram_write))
+ return ppc_md_call(nvram_write)(buf, count, ppos);
#else
if (arch_nvram_ops.write)
return arch_nvram_ops.write(buf, count, ppos);
diff --git a/sound/ppc/pmac.c b/sound/ppc/pmac.c
index 84058bbf9d12..208fb5398839 100644
--- a/sound/ppc/pmac.c
+++ b/sound/ppc/pmac.c
@@ -792,8 +792,7 @@ snd_pmac_ctrl_intr(int irq, void *devid)
*/
static void snd_pmac_sound_feature(struct snd_pmac *chip, int enable)
{
- if (ppc_md.feature_call)
- ppc_md.feature_call(PMAC_FTR_SOUND_CHIP_ENABLE, chip->node, 0, enable);
+ ppc_md_call(feature_call)(PMAC_FTR_SOUND_CHIP_ENABLE, chip->node, 0, enable);
}

/*
--
2.25.0