MIPS: Remove "weak" from mips_cdmm_phys_base() declaration
authorBjorn Helgaas <bhelgaas@google.com>
Sun, 12 Jul 2015 23:11:54 +0000 (18:11 -0500)
committerRalf Baechle <ralf@linux-mips.org>
Thu, 3 Sep 2015 10:07:39 +0000 (12:07 +0200)
Weak header file declarations are error-prone because they make every
definition weak, and the linker chooses one based on link order (see
10629d711ed7 ("PCI: Remove __weak annotation from pcibios_get_phb_of_node
decl")).

mips_cdmm_phys_base() is defined only in arch/mips/mti-malta/malta-memory.c
so there's no problem with multiple definitions.  But it works better to
have a weak default implementation and allow a strong function to override
it.  Then we don't have to test whether a definition is present, and if
there are ever multiple strong definitions, we get a link error instead of
calling a random definition.

Add a weak mips_cdmm_phys_base() definition and remove the weak annotation
from the declaration in arch/mips/include/asm/cdmm.h.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: James Hogan <james.hogan@imgtec.com>
Cc: Andrew Bresticker <abrestic@chromium.org>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/10688/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/cdmm.h
drivers/bus/mips_cdmm.c

index 16e22ce9719fdf7b801bd7c003fc916019d9dd71..bece2064cc8cbf24f6c36c603b501c6b0dc19edd 100644 (file)
@@ -53,7 +53,7 @@ struct mips_cdmm_driver {
  * mips_cdmm_phys_base() - Choose a physical base address for CDMM region.
  *
  * Picking a suitable physical address at which to map the CDMM region is
- * platform specific, so this weak function can be defined by platform code to
+ * platform specific, so this function can be defined by platform code to
  * pick a suitable value if none is configured by the bootloader.
  *
  * This address must be 32kB aligned, and the region occupies a maximum of 32kB
@@ -61,7 +61,7 @@ struct mips_cdmm_driver {
  *
  * Returns:    Physical base address for CDMM region, or 0 on failure.
  */
-phys_addr_t __weak mips_cdmm_phys_base(void);
+phys_addr_t mips_cdmm_phys_base(void);
 
 extern struct bus_type mips_cdmm_bustype;
 void __iomem *mips_cdmm_early_probe(unsigned int dev_type);
index ab3bde16ecb4443a2e63d8e327fa1db730294dff..1c543effe062f8631c688088a1620454fadf160e 100644 (file)
@@ -331,6 +331,18 @@ static phys_addr_t mips_cdmm_cur_base(void)
                << MIPS_CDMMBASE_ADDR_START;
 }
 
+/**
+ * mips_cdmm_phys_base() - Choose a physical base address for CDMM region.
+ *
+ * Picking a suitable physical address at which to map the CDMM region is
+ * platform specific, so this weak function can be overridden by platform
+ * code to pick a suitable value if none is configured by the bootloader.
+ */
+phys_addr_t __weak mips_cdmm_phys_base(void)
+{
+       return 0;
+}
+
 /**
  * mips_cdmm_setup() - Ensure the CDMM bus is initialised and usable.
  * @bus:       Pointer to bus information for current CPU.
@@ -368,7 +380,7 @@ static int mips_cdmm_setup(struct mips_cdmm_bus *bus)
        if (!bus->phys)
                bus->phys = mips_cdmm_cur_base();
        /* Otherwise, ask platform code for suggestions */
-       if (!bus->phys && mips_cdmm_phys_base)
+       if (!bus->phys)
                bus->phys = mips_cdmm_phys_base();
        /* Otherwise, copy what other CPUs have done */
        if (!bus->phys)