03 Sep, 2015

1 commit

  • 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
    Reviewed-by: James Hogan
    Cc: Andrew Bresticker
    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

    Bjorn Helgaas
     

26 May, 2015

1 commit

  • The MIPS Common Device Memory Map (CDMM) is internal to the core and has
    native endianness. There is therefore no need to byte swap the accesses
    on big endian targets, so convert the CDMM bus driver to use
    __raw_readl() rather than readl().

    Fixes: 8286ae03308c ("MIPS: Add CDMM bus support")
    Signed-off-by: James Hogan
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/9904/
    Signed-off-by: Ralf Baechle

    James Hogan
     

31 Mar, 2015

1 commit

  • Add MIPS Common Device Memory Map (CDMM) support in the form of a bus in
    the standard Linux device model. Each device attached via CDMM is
    discoverable via an 8-bit type identifier and may contain a number of
    blocks of memory mapped registers in the CDMM region. IRQs are expected
    to be handled separately.

    Due to the per-cpu (per-VPE for MT cores) nature of the CDMM devices,
    all the driver callbacks take place from workqueues which are run on the
    right CPU for the device in question, so that the driver doesn't need to
    be as concerned about which CPU it is running on. Callbacks also exist
    for when CPUs are taken offline, so that any per-CPU resources used by
    the driver can be disabled so they don't get forcefully migrated. CDMM
    devices are created as children of the CPU device they are attached to.

    Any existing CDMM configuration by the bootloader will be inherited,
    however platforms wishing to enable CDMM should implement the weak
    mips_cdmm_phys_base() function (see asm/cdmm.h) so that the bus driver
    knows where it should put the CDMM region in the physical address space
    if the bootloader hasn't already enabled it.

    A mips_cdmm_early_probe() function is also provided to allow early boot
    or particularly low level code to set up the CDMM region and probe for a
    specific device type, for example early console or KGDB IO drivers for
    the EJTAG Fast Debug Channel (FDC) CDMM device.

    Signed-off-by: James Hogan
    Cc: Greg Kroah-Hartman
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/9599/
    Signed-off-by: Ralf Baechle

    James Hogan