diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2015-07-12 19:11:54 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2015-09-03 06:07:39 -0400 |
commit | e1d97497309867cdc1064ed6b10953abd1740b05 (patch) | |
tree | 0a43fa14617abde76d3524db0e4c6ff78c544599 /drivers/bus | |
parent | 770847bad0200b62af2d93808b4e69d82f14264e (diff) |
MIPS: Remove "weak" from mips_cdmm_phys_base() declaration
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>
Diffstat (limited to 'drivers/bus')
-rw-r--r-- | drivers/bus/mips_cdmm.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/bus/mips_cdmm.c b/drivers/bus/mips_cdmm.c index ab3bde16ecb4..1c543effe062 100644 --- a/drivers/bus/mips_cdmm.c +++ b/drivers/bus/mips_cdmm.c | |||
@@ -332,6 +332,18 @@ static phys_addr_t mips_cdmm_cur_base(void) | |||
332 | } | 332 | } |
333 | 333 | ||
334 | /** | 334 | /** |
335 | * mips_cdmm_phys_base() - Choose a physical base address for CDMM region. | ||
336 | * | ||
337 | * Picking a suitable physical address at which to map the CDMM region is | ||
338 | * platform specific, so this weak function can be overridden by platform | ||
339 | * code to pick a suitable value if none is configured by the bootloader. | ||
340 | */ | ||
341 | phys_addr_t __weak mips_cdmm_phys_base(void) | ||
342 | { | ||
343 | return 0; | ||
344 | } | ||
345 | |||
346 | /** | ||
335 | * mips_cdmm_setup() - Ensure the CDMM bus is initialised and usable. | 347 | * mips_cdmm_setup() - Ensure the CDMM bus is initialised and usable. |
336 | * @bus: Pointer to bus information for current CPU. | 348 | * @bus: Pointer to bus information for current CPU. |
337 | * IS_ERR(bus) is checked, so no need for caller to check. | 349 | * IS_ERR(bus) is checked, so no need for caller to check. |
@@ -368,7 +380,7 @@ static int mips_cdmm_setup(struct mips_cdmm_bus *bus) | |||
368 | if (!bus->phys) | 380 | if (!bus->phys) |
369 | bus->phys = mips_cdmm_cur_base(); | 381 | bus->phys = mips_cdmm_cur_base(); |
370 | /* Otherwise, ask platform code for suggestions */ | 382 | /* Otherwise, ask platform code for suggestions */ |
371 | if (!bus->phys && mips_cdmm_phys_base) | 383 | if (!bus->phys) |
372 | bus->phys = mips_cdmm_phys_base(); | 384 | bus->phys = mips_cdmm_phys_base(); |
373 | /* Otherwise, copy what other CPUs have done */ | 385 | /* Otherwise, copy what other CPUs have done */ |
374 | if (!bus->phys) | 386 | if (!bus->phys) |