24 Oct, 2019

1 commit

  • Commit d698a388146c ("of: reserved-memory: ignore disabled memory-region
    nodes") added an early return in of_reserved_mem_device_init_by_idx(), but
    didn't call of_node_put() on a device_node whose ref-count was incremented
    in the call to of_parse_phandle() preceding the early exit.

    Fixes: d698a388146c ("of: reserved-memory: ignore disabled memory-region nodes")
    Signed-off-by: Chris Goldsworthy
    Cc: stable@vger.kernel.org
    Reviewed-by: Bjorn Andersson
    Signed-off-by: Rob Herring

    Chris Goldsworthy
     

25 May, 2019

1 commit

  • Ignore disabled nodes in the memory-region
    nodes list and continue to initialize the rest
    of enabled nodes.

    Check if the "reserved-memory" node is available
    and if it's not available, return 0 to ignore the
    "reserved-memory" node and continue parsing with
    next node in memory-region nodes list.

    Signed-off-by: Krishna Reddy
    Signed-off-by: Puneet Saxena
    Signed-off-by: Rob Herring

    Krishna Reddy
     

10 Apr, 2019

1 commit

  • The __reserved_mem_init_node will call region specific reserved memory
    init codes, but once all compatibled init codes failed, the memory region
    will left in memory.reserved and cause leakage.

    Take cma reserve memory DTS for example, if user declare 1MB size,
    which is not align to (PAGE_SIZE << max(MAX_ORDER - 1,
    pageblock_order)), rmem_cma_setup will return -EINVAL.
    Meanwhile, rmem_dma_setup will also return -EINVAL since "reusable"
    property is not set. If finally there is no reserved memory init pick up
    this memory, kernel will left the 1MB leak in memory.reserved.

    This patch will remove this kind of memory from memory.reserved, only
    when __reserved_mem_init_node return neither 0 nor -ENOENT.

    Signed-off-by: pierre Kuo
    Signed-off-by: Rob Herring

    pierre Kuo
     

13 Mar, 2019

2 commits

  • Marc Gonzalez reported the following kmemleak crash:

    Unable to handle kernel paging request at virtual address ffffffc021e00000
    Mem abort info:
    ESR = 0x96000006
    Exception class = DABT (current EL), IL = 32 bits
    SET = 0, FnV = 0
    EA = 0, S1PTW = 0
    Data abort info:
    ISV = 0, ISS = 0x00000006
    CM = 0, WnR = 0
    swapper pgtable: 4k pages, 39-bit VAs, pgdp = (____ptrval____) [ffffffc021e00000] pgd=000000017e3ba803, pud=000000017e3ba803, pmd=0000000000000000
    Internal error: Oops: 96000006 [#1] PREEMPT SMP
    Modules linked in:
    CPU: 6 PID: 523 Comm: kmemleak Tainted: G S W 5.0.0-rc1 #13
    Hardware name: Qualcomm Technologies, Inc. MSM8998 v1 MTP (DT)
    pstate: 80000085 (Nzcv daIf -PAN -UAO)
    pc : scan_block+0x70/0x190
    lr : scan_block+0x6c/0x190
    Process kmemleak (pid: 523, stack limit = 0x(____ptrval____))
    Call trace:
    scan_block+0x70/0x190
    scan_gray_list+0x108/0x1c0
    kmemleak_scan+0x33c/0x7c0
    kmemleak_scan_thread+0x98/0xf0
    kthread+0x11c/0x120
    ret_from_fork+0x10/0x1c
    Code: f9000fb4 d503201f 97ffffd2 35000580 (f9400260)

    The crash happens when a no-map area is allocated in
    early_init_dt_alloc_reserved_memory_arch(). The allocated region is
    registered with kmemleak, but it is then removed from memblock using
    memblock_remove() that is not kmemleak-aware.

    Replacing memblock_phys_alloc_range() with memblock_find_in_range()
    makes sure that the allocated memory is not added to kmemleak and then
    memblock_remove()'ing this memory is safe.

    As a bonus, since memblock_find_in_range() ensures the allocation in the
    specified range, the bounds check can be removed.

    [rppt@linux.ibm.com: of: fix parameters order for call to memblock_find_in_range()]
    Link: http://lkml.kernel.org/r/20190221112619.GC32004@rapoport-lnx
    Link: http://lkml.kernel.org/r/20190213181921.GB15270@rapoport-lnx
    Fixes: 3f0c820664483 ("drivers: of: add initialization code for dynamic reserved memory")
    Signed-off-by: Mike Rapoport
    Acked-by: Marek Szyprowski
    Acked-by: Prateek Patel
    Tested-by: Marc Gonzalez
    Cc: Rob Herring
    Cc: Frank Rowand
    Cc: Catalin Marinas
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mike Rapoport
     
  • The __memblock_alloc_base() function tries to allocate a memory up to
    the limit specified by its max_addr parameter. Depending on the value
    of this parameter, the __memblock_alloc_base() can is replaced with the
    appropriate memblock_phys_alloc*() variant.

    Link: http://lkml.kernel.org/r/1548057848-15136-9-git-send-email-rppt@linux.ibm.com
    Signed-off-by: Mike Rapoport
    Acked-by: Rob Herring
    Cc: Catalin Marinas
    Cc: Christophe Leroy
    Cc: Christoph Hellwig
    Cc: "David S. Miller"
    Cc: Dennis Zhou
    Cc: Geert Uytterhoeven
    Cc: Greentime Hu
    Cc: Greg Kroah-Hartman
    Cc: Guan Xuetao
    Cc: Guo Ren
    Cc: Guo Ren [c-sky]
    Cc: Heiko Carstens
    Cc: Juergen Gross [Xen]
    Cc: Mark Salter
    Cc: Matt Turner
    Cc: Max Filippov
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Paul Burton
    Cc: Petr Mladek
    Cc: Richard Weinberger
    Cc: Rich Felker
    Cc: Rob Herring
    Cc: Russell King
    Cc: Stafford Horne
    Cc: Tony Luck
    Cc: Vineet Gupta
    Cc: Yoshinori Sato
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mike Rapoport
     

01 Mar, 2019

1 commit


22 Jan, 2019

1 commit

  • Having of_reserved_mem_device_init() forcibly reconfigure DMA for all
    callers, potentially overriding the work done by a bus-specific
    .dma_configure method earlier, is at best a bad idea and at worst
    actively harmful. If drivers really need virtual devices to own
    dma-coherent memory, they should explicitly configure those devices
    based on the appropriate firmware node as they create them.

    It looks like the only driver not passing in a proper OF platform device
    is s5p-mfc, so move the rogue of_dma_configure() call into that driver
    where it logically belongs.

    Reviewed-by: Marek Szyprowski
    Acked-by: Mauro Carvalho Chehab
    Signed-off-by: Robin Murphy
    Signed-off-by: Rob Herring

    Robin Murphy
     

31 Oct, 2018

2 commits

  • When a memblock allocation APIs are called with align = 0, the alignment
    is implicitly set to SMP_CACHE_BYTES.

    Implicit alignment is done deep in the memblock allocator and it can
    come as a surprise. Not that such an alignment would be wrong even
    when used incorrectly but it is better to be explicit for the sake of
    clarity and the prinicple of the least surprise.

    Replace all such uses of memblock APIs with the 'align' parameter
    explicitly set to SMP_CACHE_BYTES and stop implicit alignment assignment
    in the memblock internal allocation functions.

    For the case when memblock APIs are used via helper functions, e.g. like
    iommu_arena_new_node() in Alpha, the helper functions were detected with
    Coccinelle's help and then manually examined and updated where
    appropriate.

    The direct memblock APIs users were updated using the semantic patch below:

    @@
    expression size, min_addr, max_addr, nid;
    @@
    (
    |
    - memblock_alloc_try_nid_raw(size, 0, min_addr, max_addr, nid)
    + memblock_alloc_try_nid_raw(size, SMP_CACHE_BYTES, min_addr, max_addr,
    nid)
    |
    - memblock_alloc_try_nid_nopanic(size, 0, min_addr, max_addr, nid)
    + memblock_alloc_try_nid_nopanic(size, SMP_CACHE_BYTES, min_addr, max_addr,
    nid)
    |
    - memblock_alloc_try_nid(size, 0, min_addr, max_addr, nid)
    + memblock_alloc_try_nid(size, SMP_CACHE_BYTES, min_addr, max_addr, nid)
    |
    - memblock_alloc(size, 0)
    + memblock_alloc(size, SMP_CACHE_BYTES)
    |
    - memblock_alloc_raw(size, 0)
    + memblock_alloc_raw(size, SMP_CACHE_BYTES)
    |
    - memblock_alloc_from(size, 0, min_addr)
    + memblock_alloc_from(size, SMP_CACHE_BYTES, min_addr)
    |
    - memblock_alloc_nopanic(size, 0)
    + memblock_alloc_nopanic(size, SMP_CACHE_BYTES)
    |
    - memblock_alloc_low(size, 0)
    + memblock_alloc_low(size, SMP_CACHE_BYTES)
    |
    - memblock_alloc_low_nopanic(size, 0)
    + memblock_alloc_low_nopanic(size, SMP_CACHE_BYTES)
    |
    - memblock_alloc_from_nopanic(size, 0, min_addr)
    + memblock_alloc_from_nopanic(size, SMP_CACHE_BYTES, min_addr)
    |
    - memblock_alloc_node(size, 0, nid)
    + memblock_alloc_node(size, SMP_CACHE_BYTES, nid)
    )

    [mhocko@suse.com: changelog update]
    [akpm@linux-foundation.org: coding-style fixes]
    [rppt@linux.ibm.com: fix missed uses of implicit alignment]
    Link: http://lkml.kernel.org/r/20181016133656.GA10925@rapoport-lnx
    Link: http://lkml.kernel.org/r/1538687224-17535-1-git-send-email-rppt@linux.vnet.ibm.com
    Signed-off-by: Mike Rapoport
    Suggested-by: Michal Hocko
    Acked-by: Paul Burton [MIPS]
    Acked-by: Michael Ellerman [powerpc]
    Acked-by: Michal Hocko
    Cc: Catalin Marinas
    Cc: Chris Zankel
    Cc: Geert Uytterhoeven
    Cc: Guan Xuetao
    Cc: Ingo Molnar
    Cc: Matt Turner
    Cc: Michal Simek
    Cc: Richard Weinberger
    Cc: Russell King
    Cc: Thomas Gleixner
    Cc: Tony Luck
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mike Rapoport
     
  • All architecures use memblock for early memory management. There is no need
    for the CONFIG_HAVE_MEMBLOCK configuration option.

    [rppt@linux.vnet.ibm.com: of/fdt: fixup #ifdefs]
    Link: http://lkml.kernel.org/r/20180919103457.GA20545@rapoport-lnx
    [rppt@linux.vnet.ibm.com: csky: fixups after bootmem removal]
    Link: http://lkml.kernel.org/r/20180926112744.GC4628@rapoport-lnx
    [rppt@linux.vnet.ibm.com: remove stale #else and the code it protects]
    Link: http://lkml.kernel.org/r/1538067825-24835-1-git-send-email-rppt@linux.vnet.ibm.com
    Link: http://lkml.kernel.org/r/1536927045-23536-4-git-send-email-rppt@linux.vnet.ibm.com
    Signed-off-by: Mike Rapoport
    Acked-by: Michal Hocko
    Tested-by: Jonathan Cameron
    Cc: Catalin Marinas
    Cc: Chris Zankel
    Cc: "David S. Miller"
    Cc: Geert Uytterhoeven
    Cc: Greentime Hu
    Cc: Greg Kroah-Hartman
    Cc: Guan Xuetao
    Cc: Ingo Molnar
    Cc: "James E.J. Bottomley"
    Cc: Jonas Bonn
    Cc: Jonathan Corbet
    Cc: Ley Foon Tan
    Cc: Mark Salter
    Cc: Martin Schwidefsky
    Cc: Matt Turner
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Palmer Dabbelt
    Cc: Paul Burton
    Cc: Richard Kuo
    Cc: Richard Weinberger
    Cc: Rich Felker
    Cc: Russell King
    Cc: Serge Semin
    Cc: Thomas Gleixner
    Cc: Tony Luck
    Cc: Vineet Gupta
    Cc: Yoshinori Sato
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mike Rapoport
     

03 May, 2018

1 commit

  • With each bus implementing its own DMA configuration callback, there is no
    need for bus to explicitly set the force_dma flag. Modify the
    of_dma_configure function to accept an input parameter which specifies if
    implicit DMA configuration is required when it is not described by the
    firmware.

    Signed-off-by: Nipun Gupta
    Acked-by: Bjorn Helgaas # PCI parts
    Reviewed-by: Rob Herring
    [hch: tweaked the changelog a bit]
    Signed-off-by: Christoph Hellwig

    Christoph Hellwig
     

08 Jan, 2018

1 commit

  • Convert remaining DT files to use SPDX-License-Identifier tags.

    Cc: Benjamin Herrenschmidt
    Cc: Guennadi Liakhovetski
    Cc: Paul Mackerras
    Cc: Pantelis Antoniou
    Reviewed-by: Frank Rowand
    Reviewed-by: Philippe Ombredanne
    Signed-off-by: Rob Herring

    Rob Herring
     

17 Nov, 2017

1 commit

  • Pull ARM SoC driver updates from Arnd Bergmann:
    "This branch contains platform-related driver updates for ARM and
    ARM64, these are the areas that bring the changes:

    New drivers:

    - driver support for Renesas R-Car V3M (R8A77970)

    - power management support for Amlogic GX

    - a new driver for the Tegra BPMP thermal sensor

    - a new bus driver for Technologic Systems NBUS

    Changes for subsystems that prefer to merge through arm-soc:

    - the usual updates for reset controller drivers from Philipp Zabel,
    with five added drivers for SoCs in the arc, meson, socfpa,
    uniphier and mediatek families

    - updates to the ARM SCPI and PSCI frameworks, from Sudeep Holla,
    Heiner Kallweit and Lorenzo Pieralisi

    Changes specific to some ARM-based SoC

    - the Freescale/NXP DPAA QBMan drivers from PowerPC can now work on
    ARM as well

    - several changes for power management on Broadcom SoCs

    - various improvements on Qualcomm, Broadcom, Amlogic, Atmel,
    Mediatek

    - minor Cleanups for Samsung, TI OMAP SoCs"

    [ NOTE! This doesn't work without the previous ARM SoC device-tree pull,
    because the R8A77970 driver is missing a header file that came from
    that pull.

    The fact that this got merged afterwards only fixes it at this point,
    and bisection of that driver will fail if/when you walk into the
    history of that driver. - Linus ]

    * tag 'armsoc-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (96 commits)
    soc: amlogic: meson-gx-pwrc-vpu: fix power-off when powered by bootloader
    bus: add driver for the Technologic Systems NBUS
    memory: omap-gpmc: Remove deprecated gpmc_update_nand_reg()
    soc: qcom: remove unused label
    soc: amlogic: gx pm domain: add PM and OF dependencies
    drivers/firmware: psci_checker: Add missing destroy_timer_on_stack()
    dt-bindings: power: add amlogic meson power domain bindings
    soc: amlogic: add Meson GX VPU Domains driver
    soc: qcom: Remote filesystem memory driver
    dt-binding: soc: qcom: Add binding for rmtfs memory
    of: reserved_mem: Accessor for acquiring reserved_mem
    of/platform: Generalize /reserved-memory handling
    soc: mediatek: pwrap: fix fatal compiler error
    soc: mediatek: pwrap: fix compiler errors
    arm64: mediatek: cleanup message for platform selection
    soc: Allow test-building of MediaTek drivers
    soc: mediatek: place Kconfig for all SoC drivers under menu
    soc: mediatek: pwrap: add support for MT7622 SoC
    soc: mediatek: pwrap: add common way for setup CS timing extenstion
    soc: mediatek: pwrap: add MediaTek MT6380 as one slave of pwrap
    ..

    Linus Torvalds
     

22 Oct, 2017

1 commit

  • In some cases drivers referencing a reserved-memory region might want to
    remap the entire region, but when defining the reserved-memory by "size"
    the client driver has no means to know the associated base address of
    the reserved memory region.

    This patch adds an accessor for such drivers to acquire a handle to
    their associated reserved-memory for this purpose.

    A complicating factor for the implementation is that the reserved_mem
    objects are created from the flattened DeviceTree, as such we can't
    use the device_node address for comparison. Fortunately the name of the
    node will be used as "name" of the reserved_mem and will be used when
    building the full_name, so we can compare the "name" with the basename
    of the full_name to find the match.

    Reviewed-by: Rob Herring
    Signed-off-by: Bjorn Andersson
    Signed-off-by: Andy Gross

    Bjorn Andersson
     

13 Oct, 2017

1 commit

  • There are two types of memory reservations firmware can ask the kernel
    to make in the device tree: static and dynamic.
    See Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt

    If you have greater than 16 entries in /reserved-memory (as we do on
    POWER9 systems) you would get this scary looking error message:
    [ 0.000000] OF: reserved mem: not enough space all defined regions.

    This is harmless if all your reservations are static (which with OPAL on
    POWER9, they are).

    It is not harmless if you have any dynamic reservations after the 16th.

    In the first pass over the fdt to find reservations, the child nodes of
    /reserved-memory are added to a static array in of_reserved_mem.c so that
    memory can be reserved in a 2nd pass. The array has 16 entries. This is why,
    on my dual socket POWER9 system, I get that error 4 times with 20 static
    reservations.

    We don't have a problem on ppc though, as in arch/powerpc/kernel/prom.c
    we look at the new style /reserved-ranges property to do reservations,
    and this logic was introduced in 0962e8004e974 (well before any powernv
    system shipped).

    A Google search shows up no occurances of that exact error message, so we're
    probably safe in that no machine that people use has memory not being reserved
    when it should be.

    The simple fix is to bump the length of the array to 32 which "should be
    enough for everyone(TM)". The simple fix of not recording static allocations
    in the array would cause problems for devices with "memory-region" properties.
    A more future-proof fix is likely possible, although more invasive and this
    simple fix is perfectly suitable in the meantime while a more future-proof
    fix is developed.

    Signed-off-by: Stewart Smith
    Tested-by: Mauricio Faria de Oliveira
    Signed-off-by: Rob Herring

    Stewart Smith
     

11 May, 2017

1 commit

  • A change to function pointers that was meant to address a sparse warning
    turned out to cause hundreds of new gcc-7 warnings:

    include/linux/of_irq.h:11:13: error: type qualifiers ignored on function return type [-Werror=ignored-qualifiers]
    drivers/of/of_reserved_mem.c: In function '__reserved_mem_init_node':
    drivers/of/of_reserved_mem.c:200:7: error: type qualifiers ignored on function return type [-Werror=ignored-qualifiers]
    int const (*initfn)(struct reserved_mem *rmem) = i->data;

    Turns out the sparse warnings were spurious and have been fixed in
    upstream sparse since 0.5.0 in commit "sparse: treat function pointers
    as pointers to const data".

    This partially reverts commit 17a70355ea576843a7ac851f1db26872a50b2850.

    Fixes: 17a70355ea57 ("of: fix sparse warnings in fdt, irq, reserved mem, and resolver code")
    Reported-by: Arnd Bergmann
    Signed-off-by: Rob Herring

    Rob Herring
     

05 May, 2017

1 commit

  • sparse generates the following warnings in drivers/of/:

    ../drivers/of/fdt.c:63:36: warning: cast to restricted __be32
    ../drivers/of/fdt.c:68:33: warning: cast to restricted __be32
    ../drivers/of/irq.c:105:88: warning: incorrect type in initializer (different base types)
    ../drivers/of/irq.c:105:88: expected restricted __be32
    ../drivers/of/irq.c:105:88: got int
    ../drivers/of/irq.c:526:35: warning: incorrect type in assignment (different modifiers)
    ../drivers/of/irq.c:526:35: expected int ( *const [usertype] irq_init_cb )( ... )
    ../drivers/of/irq.c:526:35: got void const *const data
    ../drivers/of/of_reserved_mem.c:200:50: warning: incorrect type in initializer (different modifiers)
    ../drivers/of/of_reserved_mem.c:200:50: expected int ( *[usertype] initfn )( ... )
    ../drivers/of/of_reserved_mem.c:200:50: got void const *const data
    ../drivers/of/resolver.c:95:42: warning: incorrect type in assignment (different base types)
    ../drivers/of/resolver.c:95:42: expected unsigned int [unsigned] [usertype]
    ../drivers/of/resolver.c:95:42: got restricted __be32 [usertype]

    All these are harmless type mismatches fixed by adjusting the types.

    Signed-off-by: Rob Herring

    Rob Herring
     

05 Jan, 2017

1 commit

  • For some IPs, there may be virtual child devices created and for them its
    necessary to set the dma_ops if it's using reserved memory else it will call
    the dummy dma_ops during buffer operations for the child devices which will
    lead to memory mapping failure.

    Signed-off-by: Smitha T Murthy
    Signed-off-by: Pankaj Dubey
    Acked-by: Marek Szyprowski
    Signed-off-by: Rob Herring

    Smitha T Murthy
     

31 Jul, 2016

1 commit

  • Pull DeviceTree updates from Rob Herring:

    - remove most of_platform_populate() calls in arch code. Now the DT
    core code calls it in the default case and platforms only need to
    call it if they have special needs

    - use pr_fmt on all the DT core print statements

    - CoreSight binding doc improvements to block name descriptions

    - add dt_to_config script which can parse dts files and list
    corresponding kernel config options

    - fix memory leak hit with a PowerMac DT

    - correct a bunch of STMicro compatible strings to use the correct
    vendor prefix

    - fix DA9052 PMIC binding doc to match what is actually used in dts
    files

    * tag 'devicetree-for-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux: (35 commits)
    documentation: da9052: Update regulator bindings names to match DA9052/53 DTS expectations
    xtensa: Partially Revert "xtensa: Remove unnecessary of_platform_populate with default match table"
    xtensa: Fix build error due to missing include file
    MIPS: ath79: Add missing include file
    Fix spelling errors in Documentation/devicetree
    ARM: dts: fix STMicroelectronics compatible strings
    powerpc/dts: fix STMicroelectronics compatible strings
    Documentation: dt: i2c: use correct STMicroelectronics vendor prefix
    scripts/dtc: dt_to_config - kernel config options for a devicetree
    of: fdt: mark unflattened tree as detached
    of: overlay: add resolver error prints
    coresight: document binding acronyms
    Documentation/devicetree: document cavium-pip rx-delay/tx-delay properties
    of: use pr_fmt prefix for all console printing
    of/irq: Mark initialised interrupt controllers as populated
    of: fix memory leak related to safe_name()
    Revert "of/platform: export of_default_bus_match_table"
    of: unittest: use of_platform_default_populate() to populate default bus
    memory: omap-gpmc: use of_platform_default_populate() to populate default bus
    bus: uniphier-system-bus: use of_platform_default_populate() to populate default bus
    ...

    Linus Torvalds
     

19 Jul, 2016

1 commit


09 Jul, 2016

1 commit

  • Linux 4.7-rc6

    * tag 'v4.7-rc6': (1245 commits)
    Linux 4.7-rc6
    ovl: warn instead of error if d_type is not supported
    MIPS: Fix possible corruption of cache mode by mprotect.
    locks: use file_inode()
    usb: dwc3: st: Use explicit reset_control_get_exclusive() API
    phy: phy-stih407-usb: Use explicit reset_control_get_exclusive() API
    phy: miphy28lp: Inform the reset framework that our reset line may be shared
    namespace: update event counter when umounting a deleted dentry
    9p: use file_dentry()
    lockd: unregister notifier blocks if the service fails to come up completely
    ACPI,PCI,IRQ: correct operator precedence
    fuse: serialize dirops by default
    drm/i915: Fix missing unlock on error in i915_ppgtt_info()
    powerpc: Initialise pci_io_base as early as possible
    mfd: da9053: Fix compiler warning message for uninitialised variable
    mfd: max77620: Fix FPS switch statements
    phy: phy-stih407-usb: Inform the reset framework that our reset line may be shared
    usb: dwc3: st: Inform the reset framework that our reset line may be shared
    usb: host: ehci-st: Inform the reset framework that our reset line may be shared
    usb: host: ohci-st: Inform the reset framework that our reset line may be shared
    ...

    Mauro Carvalho Chehab
     

09 Jun, 2016

1 commit

  • Change return value back to -ENODEV when no region is defined for given
    device. This restores old behavior of this function, as some drivers rely
    on such error code.

    Fixes: 59ce4039727ef40 ("of: reserved_mem: add support for using more than
    one region for given device")

    Reported-by: Liviu Dudau
    Signed-off-by: Marek Szyprowski
    Reviewed-by: Sylwester Nawrocki
    Reviewed-by: Liviu Dudau
    Acked-by: Rob Herring
    Reviewed-by: Sumit Semwal

    Marek Szyprowski
     

03 Jun, 2016

3 commits

  • pageblock_order can be (at least) an unsigned int or an unsigned long
    depending on the kernel config and architecture, so use max_t(unsigned
    long ...) when comparing it.

    fixes these warnings:

    In file included from include/linux/list.h:8:0,
    from include/linux/kobject.h:20,
    from include/linux/of.h:21,
    from drivers/of/of_reserved_mem.c:17:
    drivers/of/of_reserved_mem.c: In function ‘__reserved_mem_alloc_size’:
    include/linux/kernel.h:748:17: warning: comparison of distinct pointer types lacks a cast
    (void) (&_max1 == &_max2); \
    ^
    include/linux/kernel.h:747:9: note: in definition of macro ‘max’
    typeof(y) _max2 = (y); \
    ^
    drivers/of/of_reserved_mem.c:131:48: note: in expansion of macro ‘max’
    align = max(align, (phys_addr_t)PAGE_SIZE << max(MAX_ORDER - 1, pageblock_ord
    ^
    include/linux/kernel.h:748:17: warning: comparison of distinct pointer types lacks a cast
    (void) (&_max1 == &_max2); \
    ^
    include/linux/kernel.h:747:21: note: in definition of macro ‘max’
    typeof(y) _max2 = (y); \
    ^
    drivers/of/of_reserved_mem.c:131:48: note: in expansion of macro ‘max’
    align = max(align, (phys_addr_t)PAGE_SIZE << max(MAX_ORDER - 1, pageblock_ord
    ^

    Fixes: 1cc8e3458b51 ("drivers: of: of_reserved_mem: fixup the alignment with CMA setup")
    Signed-off-by: Stephen Rothwell
    Signed-off-by: Rob Herring

    Stephen Rothwell
     
  • There was an alignment mismatch issue for CMA and it was fixed by
    commit 1cc8e3458b51 ("drivers: of: of_reserved_mem: fixup the alignment with CMA setup").
    However the way of the commit considers not only dma-contiguous(CMA) but also
    dma-coherent which has no that requirement.

    This patch checks more to distinguish dma-contiguous(CMA) from dma-coherent.

    Signed-off-by: Jaewon Kim
    Acked-by: Jason Liu
    Acked-by: Marek Szyprowski
    [robh: remove erroneous opening bracket]
    Signed-off-by: Rob Herring

    Jaewon
     
  • This patch allows device drivers to initialize more than one reserved
    memory region assigned to given device. When driver needs to use more
    than one reserved memory region, it should allocate child devices and
    initialize regions by index for each of its child devices.

    Signed-off-by: Marek Szyprowski
    Acked-by: Rob Herring
    Signed-off-by: Sylwester Nawrocki

    Marek Szyprowski
     

04 Mar, 2016

1 commit

  • early_init_dt_alloc_reserved_memory_arch passes end as 0 to
    __memblock_alloc_base, when limits are not specified. But
    __memblock_alloc_base takes end value of 0 as MEMBLOCK_ALLOC_ACCESSIBLE
    and limits the end to memblock.current_limit. This results in regions
    never being placed in HIGHMEM area, for e.g. CMA.
    Let __memblock_alloc_base allocate from anywhere in memory if limits are
    not specified.

    Acked-by: Marek Szyprowski
    Signed-off-by: Vinayak Menon
    Cc: stable@vger.kernel.org
    Signed-off-by: Rob Herring

    Vinayak Menon
     

01 Dec, 2015

1 commit

  • In order to check for overlapping reserved memory regions, we first need
    to sort the array of memory regions. This is implemented using sort(),
    and a custom comparison function __rmem_cmp().

    Unfortunatley __rmem_cmp() doesn't work in all cases. Because the two
    base values are phys_addr_t, they may be u64 on some platforms, in which
    case subtracting one from the other and then (implicitly) casting to int
    does not give us the -ve/0/+ve value we need.

    This leads to incorrect reports about overlaps, eg:

    ibm,slw-image@1ffe600000 (0x0000001ffe600000--0x0000001ffe700000) overlaps with
    ibm,firmware-allocs-memory@1000000000 (0x0000001000000000--0x0000001000dc0200)

    Fix it by just doing the standard double if and return 0 logic.

    Fixes: ae1add247bf8 ("of: Check for overlap in reserved memory regions")
    Signed-off-by: Michael Ellerman
    Signed-off-by: Rob Herring

    Michael Ellerman
     

11 Nov, 2015

2 commits

  • There is an alignment mismatch issue between the of_reserved_mem and
    the CMA setup requirement. The of_reserved_mem will try to get the
    alignment value from the DTS and pass it to __memblock_alloc_base to
    do the memory block base allocation, but the alignment value specified
    in the DTS may not satisfy the CAM setup requirement since CMA setup
    required the alignment as the following in the code:

    align = PAGE_SIZE << max(MAX_ORDER - 1, pageblock_order);

    The sanity check in the function of rmem_cma_setup will fail if the
    alignment does not setup correctly and thus CMA will fail to setup.

    This patch is to fixup the alignment to meet the CMA setup required.

    Mailing-list-thread: https://lkml.org/lkml/2015/11/9/138
    Signed-off-by: Jason Liu
    Acked-by: Marek Szyprowski
    Cc: Grant Likely
    Cc: Rob Herring
    Cc: stable@vger.kernel.org
    Signed-off-by: Rob Herring

    Jason Liu
     
  • __rmem_check_for_overlap() is called very early in boot, and on some
    powerpc systems it's not safe to call WARN that early in boot.

    If the overlap check fails the system will oops instead of printing a
    warning. Furthermore because it's so early in boot the console is not up
    and the user doesn't see the oops, they just get a dead system.

    Fix it by printing an error instead of calling WARN.

    Fixes: ae1add247bf8 ("of: Check for overlap in reserved memory regions")
    Signed-off-by: Michael Ellerman
    Signed-off-by: Rob Herring

    Michael Ellerman
     

18 Sep, 2015

1 commit

  • Any overlap in the reserved memory regions (those specified in the
    reserved-memory DT node) is a bug. These bugs might go undetected as
    long as the contested region isn't used simultaneously by multiple
    software agents, which makes such bugs hard to debug. Fix this by
    printing a scary warning during boot if overlap is detected.

    Signed-off-by: Mitchel Humpherys
    Signed-off-by: Rob Herring

    Mitchel Humpherys
     

14 Jan, 2015

1 commit


30 Oct, 2014

1 commit

  • Driver calling of_reserved_mem_device_init() might be interested if the
    initialization has been successful or not, so add support for returning
    error code.

    This fixes a build warining caused by commit 7bfa5ab6fa1b ("drivers:
    dma-coherent: add initialization from device tree"), which has been
    merged without this change and without fixing function return value.

    Fixes: 7bfa5ab6fa1b1 ("drivers: dma-coherent: add initialization from device tree")
    Signed-off-by: Marek Szyprowski
    Acked-by: Arnd Bergmann
    Cc: Michal Nazarewicz
    Cc: Grant Likely
    Cc: Laura Abbott
    Cc: Josh Cartwright
    Cc: Joonsoo Kim
    Cc: Kyungmin Park
    Cc: Russell King
    Cc: Stephen Rothwell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Marek Szyprowski
     

02 Aug, 2014

1 commit


21 May, 2014

1 commit


30 Apr, 2014

1 commit

  • Make of_get_flat_dt_prop arguments compatible with libfdt fdt_getprop
    call in preparation to convert FDT code to use libfdt. Make the return
    value const and the property length ptr type an int.

    Signed-off-by: Rob Herring
    Tested-by: Michal Simek
    Tested-by: Grant Likely
    Tested-by: Stephen Chivers

    Rob Herring
     

12 Mar, 2014

2 commits


15 Oct, 2013

1 commit


10 Sep, 2013

1 commit


27 Aug, 2013

1 commit

  • This patch adds device tree support for contiguous and reserved memory
    regions defined in device tree.

    Large memory blocks can be reliably reserved only during early boot.
    This must happen before the whole memory management subsystem is
    initialized, because we need to ensure that the given contiguous blocks
    are not yet allocated by kernel. Also it must happen before kernel
    mappings for the whole low memory are created, to ensure that there will
    be no mappings (for reserved blocks) or mapping with special properties
    can be created (for CMA blocks). This all happens before device tree
    structures are unflattened, so we need to get reserved memory layout
    directly from fdt.

    Later, those reserved memory regions are assigned to devices on each
    device structure initialization.

    Signed-off-by: Marek Szyprowski
    Acked-by: Kyungmin Park
    Acked-by: Michal Nazarewicz
    Acked-by: Tomasz Figa
    Acked-by: Stephen Warren
    Reviewed-by: Rob Herring

    Marek Szyprowski