17 Dec, 2014

1 commit

  • Pull ARM SoC/iommu configuration update from Arnd Bergmann:
    "The iomm-config branch contains work from Will Deacon, quoting his
    description:

    This series adds automatic IOMMU and DMA-mapping configuration for
    OF-based DMA masters described using the generic IOMMU devicetree
    bindings. Although there is plenty of future work around splitting up
    iommu_ops, adding default IOMMU domains and sorting out automatic IOMMU
    group creation for the platform_bus, this is already useful enough for
    people to port over their IOMMU drivers and start using the new probing
    infrastructure (indeed, Marek has patches queued for the Exynos IOMMU).

    The branch touches core ARM and IOMMU driver files, and the respective
    maintainers (Russell King and Joerg Roedel) agreed to have the
    contents merged through the arm-soc tree.

    The final version was ready just before the merge window, so we ended
    up delaying it a bit longer than the rest, but we don't expect to see
    regressions because this is just additional infrastructure that will
    get used in drivers starting in 3.20 but is unused so far"

    * tag 'iommu-config-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
    iommu: store DT-probed IOMMU data privately
    arm: dma-mapping: plumb our iommu mapping ops into arch_setup_dma_ops
    arm: call iommu_init before of_platform_populate
    dma-mapping: detect and configure IOMMU in of_dma_configure
    iommu: fix initialization without 'add_device' callback
    iommu: provide helper function to configure an IOMMU for an of master
    iommu: add new iommu_ops callback for adding an OF device
    dma-mapping: replace set_arch_dma_coherent_ops with arch_setup_dma_ops
    iommu: provide early initialisation hook for IOMMU drivers

    Linus Torvalds
     

15 Dec, 2014

1 commit

  • Pull i2c updates from Wolfram Sang:
    "For 3.19, the I2C subsystem has to offer special candy this time.
    Right in time for Christmas :)

    - I2C slave framework: finally, a generic mechanism for Linux being
    an I2C slave (if the bus driver supports that). Docs are still
    missing but will come later this cycle, the code is good enough to
    go.
    - I2C muxes represent their topology in sysfs much more detailed.
    This will help users to navigate around much easier.
    - irq population of i2c clients is now done at probe time, not device
    creation time, to have better support for deferred probing.
    - new drivers for Imagination SCB, Amlogic Meson
    - DMA support added for Freescale IMX, Renesas SHMobile
    - slightly bigger driver updates to OMAP, i801, AT91, and rk3x
    (mostly quirk handling, timing updates, and using better kernel
    interfaces)
    - eeprom driver can now write with byte-access (very slow, but OK to
    have)
    - and the bunch of smaller fixes, cleanups, ID updates..."

    * 'i2c/for-3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: (56 commits)
    i2c: sh_mobile: remove unneeded DMA mask
    i2c: rcar: add slave support
    i2c: slave-eeprom: add eeprom simulator driver
    i2c: core changes for slave support
    MAINTAINERS: add I2C dt bindings also to I2C realm
    i2c: designware: Fix falling time bindings doc
    i2c: davinci: switch to use platform_get_irq
    Documentation: i2c: Use PM ops instead of legacy suspend/resume
    i2c: sh_mobile: optimize irq entry
    i2c: pxa: add support for SCCB devices
    omap: i2c: don't check bus state IP rev3.3 and earlier
    i2c: s3c2410: Handle i2c sys_cfg register in i2c driver
    i2c: rk3x: add Kconfig dependency on COMMON_CLK
    i2c: omap: add notes related to i2c multimaster mode
    i2c: omap: don't reset controller if Arbitration Lost detected
    i2c: omap: implement workaround for handling invalid BB-bit values
    i2c: omap: cleanup register definitions
    i2c: rk3x: handle dynamic clock rate changes correctly
    i2c: at91: enable probe deferring on dma channel request
    i2c: at91: remove legacy DMA support
    ...

    Linus Torvalds
     

12 Dec, 2014

1 commit

  • Pull devicetree changes from Grant Likely:
    "Lots of activity in the devicetree code for v3.18. Most of it is
    related to getting all of the overlay support code in place, but there
    are other important things in there.

    Highlights:

    - OF_RECONFIG notifiers for SPI, I2C and Platform devices. Those
    subsystems can now respond to live changes to the device tree.

    - CONFIG_OF_OVERLAY method for applying live changes to the device
    tree

    - Removal of the of_allnodes list. This used to be used to iterate
    over all the nodes in the device tree, but it is unnecessary
    because the same thing can be done by iterating over the list of
    child pointers. Getting rid of of_allnodes saves some memory and
    avoids the possibility of of_allnodes being sorted differently from
    the child lists.

    - Support for retrieving original DTB blob via sysfs. Needed by
    kexec.

    - More unittests

    - Documentation and minor bug fixes"

    * tag 'devicetree-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/glikely/linux: (42 commits)
    of: Delete unnecessary check before calling "of_node_put()"
    of: Drop ->next pointer from struct device_node
    spi: Check for spi_of_notifier when CONFIG_OF_DYNAMIC=y
    of: support passing console options with stdout-path
    of: add optional options parameter to of_find_node_by_path()
    of: Add bindings for chosen node, stdout-path
    of: Remove unneeded and incorrect MODULE_DEVICE_TABLE
    ARM: dt: fix up PL011 device tree bindings
    of: base, fix of_property_read_string_helper kernel-doc
    of: remove select of non-existant OF_DEVICE config symbol
    spi/of: Add OF notifier handler
    spi/of: Create new device registration method and accessors
    i2c/of: Add OF_RECONFIG notifier handler
    i2c/of: Factor out Devicetree registration code
    of/overlay: Add overlay unittests
    of/overlay: Introduce DT overlay support
    of/reconfig: Add OF_DYNAMIC notifier for platform_bus_type
    of/reconfig: Always use the same structure for notifiers
    of/reconfig: Add debug output for OF_RECONFIG notifiers
    of/reconfig: Add empty stubs for the of_reconfig methods
    ...

    Linus Torvalds
     

11 Dec, 2014

2 commits

  • Pull ACPI and power management updates from Rafael Wysocki:
    "This time we have some more new material than we used to have during
    the last couple of development cycles.

    The most important part of it to me is the introduction of a unified
    interface for accessing device properties provided by platform
    firmware. It works with Device Trees and ACPI in a uniform way and
    drivers using it need not worry about where the properties come from
    as long as the platform firmware (either DT or ACPI) makes them
    available. It covers both devices and "bare" device node objects
    without struct device representation as that turns out to be necessary
    in some cases. This has been in the works for quite a few months (and
    development cycles) and has been approved by all of the relevant
    maintainers.

    On top of that, some drivers are switched over to the new interface
    (at25, leds-gpio, gpio_keys_polled) and some additional changes are
    made to the core GPIO subsystem to allow device drivers to manipulate
    GPIOs in the "canonical" way on platforms that provide GPIO
    information in their ACPI tables, but don't assign names to GPIO lines
    (in which case the driver needs to do that on the basis of what it
    knows about the device in question). That also has been approved by
    the GPIO core maintainers and the rfkill driver is now going to use
    it.

    Second is support for hardware P-states in the intel_pstate driver.
    It uses CPUID to detect whether or not the feature is supported by the
    processor in which case it will be enabled by default. However, it
    can be disabled entirely from the kernel command line if necessary.

    Next is support for a platform firmware interface based on ACPI
    operation regions used by the PMIC (Power Management Integrated
    Circuit) chips on the Intel Baytrail-T and Baytrail-T-CR platforms.
    That interface is used for manipulating power resources and for
    thermal management: sensor temperature reporting, trip point setting
    and so on.

    Also the ACPI core is now going to support the _DEP configuration
    information in a limited way. Basically, _DEP it supposed to reflect
    off-the-hierarchy dependencies between devices which may be very
    indirect, like when AML for one device accesses locations in an
    operation region handled by another device's driver (usually, the
    device depended on this way is a serial bus or GPIO controller). The
    support added this time is sufficient to make the ACPI battery driver
    work on Asus T100A, but it is general enough to be able to cover some
    other use cases in the future.

    Finally, we have a new cpufreq driver for the Loongson1B processor.

    In addition to the above, there are fixes and cleanups all over the
    place as usual and a traditional ACPICA update to a recent upstream
    release.

    As far as the fixes go, the ACPI LPSS (Low-power Subsystem) driver for
    Intel platforms should be able to handle power management of the DMA
    engine correctly, the cpufreq-dt driver should interact with the
    thermal subsystem in a better way and the ACPI backlight driver should
    handle some more corner cases, among other things.

    On top of the ACPICA update there are fixes for race conditions in the
    ACPICA's interrupt handling code which might lead to some random and
    strange looking failures on some systems.

    In the cleanups department the most visible part is the series of
    commits targeted at getting rid of the CONFIG_PM_RUNTIME configuration
    option. That was triggered by a discussion regarding the generic
    power domains code during which we realized that trying to support
    certain combinations of PM config options was painful and not really
    worth it, because nobody would use them in production anyway. For
    this reason, we decided to make CONFIG_PM_SLEEP select
    CONFIG_PM_RUNTIME and that lead to the conclusion that the latter
    became redundant and CONFIG_PM could be used instead of it. The
    material here makes that replacement in a major part of the tree, but
    there will be at least one more batch of that in the second part of
    the merge window.

    Specifics:

    - Support for retrieving device properties information from ACPI _DSD
    device configuration objects and a unified device properties
    interface for device drivers (and subsystems) on top of that. As
    stated above, this works with Device Trees and ACPI and allows
    device drivers to be written in a platform firmware (DT or ACPI)
    agnostic way. The at25, leds-gpio and gpio_keys_polled drivers are
    now going to use this new interface and the GPIO subsystem is
    additionally modified to allow device drivers to assign names to
    GPIO resources returned by ACPI _CRS objects (in case _DSD is not
    present or does not provide the expected data). The changes in
    this set are mostly from Mika Westerberg, Rafael J Wysocki, Aaron
    Lu, and Darren Hart with some fixes from others (Fabio Estevam,
    Geert Uytterhoeven).

    - Support for Hardware Managed Performance States (HWP) as described
    in Volume 3, section 14.4, of the Intel SDM in the intel_pstate
    driver. CPUID is used to detect whether or not the feature is
    supported by the processor. If supported, it will be enabled
    automatically unless the intel_pstate=no_hwp switch is present in
    the kernel command line. From Dirk Brandewie.

    - New Intel Broadwell-H ID for intel_pstate (Dirk Brandewie).

    - Support for firmware interface based on ACPI operation regions used
    by the PMIC chips on the Intel Baytrail-T and Baytrail-T-CR
    platforms for power resource control and thermal management (Aaron
    Lu).

    - Limited support for retrieving off-the-hierarchy dependencies
    between devices from ACPI _DEP device configuration objects and
    deferred probing support for the ACPI battery driver based on the
    _DEP information to make that driver work on Asus T100A (Lan
    Tianyu).

    - New cpufreq driver for the Loongson1B processor (Kelvin Cheung).

    - ACPICA update to upstream revision 20141107 which only affects
    tools (Bob Moore).

    - Fixes for race conditions in the ACPICA's interrupt handling code
    and in the ACPI code related to system suspend and resume (Lv Zheng
    and Rafael J Wysocki).

    - ACPI core fix for an RCU-related issue in the ioremap() regions
    management code that slowed down significantly after CPUs had been
    allowed to enter idle states even if they'd had RCU callbakcs
    queued and triggered some problems in certain proprietary graphics
    driver (and elsewhere). The fix replaces synchronize_rcu() in that
    code with synchronize_rcu_expedited() which makes the issue go
    away. From Konstantin Khlebnikov.

    - ACPI LPSS (Low-Power Subsystem) driver fix to handle power
    management of the DMA engine included into the LPSS correctly. The
    problem is that the DMA engine doesn't have ACPI PM support of its
    own and it simply is turned off when the last LPSS device having
    ACPI PM support goes into D3cold. To work around that, the PM
    domain used by the ACPI LPSS driver is redesigned so at least one
    device with ACPI PM support will be on as long as the DMA engine is
    in use. From Andy Shevchenko.

    - ACPI backlight driver fix to avoid using it on "Win8-compatible"
    systems where it doesn't work and where it was used by default by
    mistake (Aaron Lu).

    - Assorted minor ACPI core fixes and cleanups from Tomasz Nowicki,
    Sudeep Holla, Huang Rui, Hanjun Guo, Fabian Frederick, and Ashwin
    Chaugule (mostly related to the upcoming ARM64 support).

    - Intel RAPL (Running Average Power Limit) power capping driver fixes
    and improvements including new processor IDs (Jacob Pan).

    - Generic power domains modification to power up domains after
    attaching devices to them to meet the expectations of device
    drivers and bus types assuming devices to be accessible at probe
    time (Ulf Hansson).

    - Preliminary support for controlling device clocks from the generic
    power domains core code and modifications of the ARM/shmobile
    platform to use that feature (Ulf Hansson).

    - Assorted minor fixes and cleanups of the generic power domains core
    code (Ulf Hansson, Geert Uytterhoeven).

    - Assorted minor fixes and cleanups of the device clocks control code
    in the PM core (Geert Uytterhoeven, Grygorii Strashko).

    - Consolidation of device power management Kconfig options by making
    CONFIG_PM_SLEEP select CONFIG_PM_RUNTIME and removing the latter
    which is now redundant (Rafael J Wysocki and Kevin Hilman). That
    is the first batch of the changes needed for this purpose.

    - Core device runtime power management support code cleanup related
    to the execution of callbacks (Andrzej Hajda).

    - cpuidle ARM support improvements (Lorenzo Pieralisi).

    - cpuidle cleanup related to the CPUIDLE_FLAG_TIME_VALID flag and a
    new MAINTAINERS entry for ARM Exynos cpuidle (Daniel Lezcano and
    Bartlomiej Zolnierkiewicz).

    - New cpufreq driver callback (->ready) to be executed when the
    cpufreq core is ready to use a given policy object and cpufreq-dt
    driver modification to use that callback for cooling device
    registration (Viresh Kumar).

    - cpufreq core fixes and cleanups (Viresh Kumar, Vince Hsu, James
    Geboski, Tomeu Vizoso).

    - Assorted fixes and cleanups in the cpufreq-pcc, intel_pstate,
    cpufreq-dt, pxa2xx cpufreq drivers (Lenny Szubowicz, Ethan Zhao,
    Stefan Wahren, Petr Cvek).

    - OPP (Operating Performance Points) framework modification to allow
    OPPs to be removed too and update of a few cpufreq drivers
    (cpufreq-dt, exynos5440, imx6q, cpufreq) to remove OPPs (added
    during initialization) on driver removal (Viresh Kumar).

    - Hibernation core fixes and cleanups (Tina Ruchandani and Markus
    Elfring).

    - PM Kconfig fix related to CPU power management (Pankaj Dubey).

    - cpupower tool fix (Prarit Bhargava)"

    * tag 'pm+acpi-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (120 commits)
    i2c-omap / PM: Drop CONFIG_PM_RUNTIME from i2c-omap.c
    dmaengine / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    tools: cpupower: fix return checks for sysfs_get_idlestate_count()
    drivers: sh / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    e1000e / igb / PM: Eliminate CONFIG_PM_RUNTIME
    MMC / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    MFD / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    misc / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    media / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    input / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    leds: leds-gpio: Fix multiple instances registration without 'label' property
    iio / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    hsi / OMAP / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    i2c-hid / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    drm / exynos / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    gpio / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    hwrandom / exynos / PM: Use CONFIG_PM in #ifdef
    block / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    USB / PM: Drop CONFIG_PM_RUNTIME from the USB core
    PM: Merge the SET*_RUNTIME_PM_OPS() macros
    ...

    Linus Torvalds
     
  • Pull irq domain updates from Thomas Gleixner:
    "The real interesting irq updates:

    - Support for hierarchical irq domains:

    For complex interrupt routing scenarios where more than one
    interrupt related chip is involved we had no proper representation
    in the generic interrupt infrastructure so far. That made people
    implement rather ugly constructs in their nested irq chip
    implementations. The main offenders are x86 and arm/gic.

    To distangle that mess we have now hierarchical irqdomains which
    seperate the various interrupt chips and connect them via the
    hierarchical domains. That keeps the domain specific details
    internal to the particular hierarchy level and removes the
    criss/cross referencing of chip internals. The resulting hierarchy
    for a complex x86 system will look like this:

    vector mapped: 74
    msi-0 mapped: 2
    dmar-ir-1 mapped: 69
    ioapic-1 mapped: 4
    ioapic-0 mapped: 20
    pci-msi-2 mapped: 45
    dmar-ir-0 mapped: 3
    ioapic-2 mapped: 1
    pci-msi-1 mapped: 2
    htirq mapped: 0

    Neither ioapic nor pci-msi know about the dmar interrupt remapping
    between themself and the vector domain. If interrupt remapping is
    disabled ioapic and pci-msi become direct childs of the vector
    domain.

    In hindsight we should have done that years ago, but in hindsight
    we always know better :)

    - Support for generic MSI interrupt domain handling

    We have more and more non PCI related MSI interrupts, so providing
    a generic infrastructure for this is better than having all
    affected architectures implementing their own private hacks.

    - Support for PCI-MSI interrupt domain handling, based on the generic
    MSI support.

    This part carries the pci/msi branch from Bjorn Helgaas pci tree to
    avoid a massive conflict. The PCI/MSI parts are acked by Bjorn.

    I have two more branches on top of this. The full conversion of x86
    to hierarchical domains and a partial conversion of arm/gic"

    * 'irq-irqdomain-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (41 commits)
    genirq: Move irq_chip_write_msi_msg() helper to core
    PCI/MSI: Allow an msi_controller to be associated to an irq domain
    PCI/MSI: Provide mechanism to alloc/free MSI/MSIX interrupt from irqdomain
    PCI/MSI: Enhance core to support hierarchy irqdomain
    PCI/MSI: Move cached entry functions to irq core
    genirq: Provide default callbacks for msi_domain_ops
    genirq: Introduce msi_domain_alloc/free_irqs()
    asm-generic: Add msi.h
    genirq: Add generic msi irq domain support
    genirq: Introduce callback irq_chip.irq_write_msi_msg
    genirq: Work around __irq_set_handler vs stacked domains ordering issues
    irqdomain: Introduce helper function irq_domain_add_hierarchy()
    irqdomain: Implement a method to automatically call parent domains alloc/free
    genirq: Introduce helper irq_domain_set_info() to reduce duplicated code
    genirq: Split out flow handler typedefs into seperate header file
    genirq: Add IRQ_SET_MASK_OK_DONE to support stacked irqchip
    genirq: Introduce irq_chip.irq_compose_msi_msg() to support stacked irqchip
    genirq: Add more helper functions to support stacked irq_chip
    genirq: Introduce helper functions to support stacked irq_chip
    irqdomain: Do irq_find_mapping and set_type for hierarchy irqdomain in case OF
    ...

    Linus Torvalds
     

09 Dec, 2014

1 commit

  • * device-properties:
    leds: leds-gpio: Fix multiple instances registration without 'label' property
    leds: leds-gpio: Fix legacy GPIO number case
    ACPI / property: Drop size_prop from acpi_dev_get_property_reference()
    leds: leds-gpio: Convert gpio_blink_set() to use GPIO descriptors
    ACPI / GPIO: Document ACPI GPIO mappings API
    net: rfkill: gpio: Add default GPIO driver mappings for ACPI
    ACPI / GPIO: Driver GPIO mappings for ACPI GPIOs
    input: gpio_keys_polled: Make use of device property API
    leds: leds-gpio: Make use of device property API
    gpio: Support for unified device properties interface
    Driver core: Unified interface for firmware node properties
    input: gpio_keys_polled: Add support for GPIO descriptors
    leds: leds-gpio: Add support for GPIO descriptors
    gpio: sch: Consolidate core and resume banks
    gpio / ACPI: Add support for _DSD device properties
    misc: at25: Make use of device property API
    ACPI: Allow drivers to match using Device Tree compatible property
    Driver core: Unified device properties interface for platform firmware
    ACPI: Add support for device specific properties

    Rafael J. Wysocki
     

04 Dec, 2014

4 commits

  • The of_node_put() function tests whether its argument is NULL and then
    returns immediately. Thus the test around the call is not needed.

    This issue was detected by using the Coccinelle software.

    Signed-off-by: Markus Elfring
    Signed-off-by: Grant Likely

    Markus Elfring
     
  • The ->next pointer in struct device_node is a hanger-on from when it was
    used to iterate over the whole tree by a particular device_type property
    value. Those days are long over, but the fdt unflattening code still
    uses it to put nodes in the unflattened tree into the same order as node
    in the flat tree. By reworking the unflattening code to reverse the list
    after unflattening all the children of a node, the pointer can be
    dropped which gives a small amount of memory savings.

    Signed-off-by: Grant Likely
    Acked-by: Frank Rowand
    Cc: Gaurav Minocha

    Grant Likely
     
  • Support specifying console options (like with console=ttyXN,)
    by appending them to the stdout-path property after a separating ':'.

    Example:
    stdout-path = "uart0:115200";

    Signed-off-by: Leif Lindholm
    [grant.likely: minor rework to shorten the diffstat]
    Signed-off-by: Grant Likely

    Leif Lindholm
     
  • Update of_find_node_by_path():
    1) Rename function to of_find_node_opts_by_path(), adding an optional
    pointer argument. Provide a static inline wrapper version of
    of_find_node_by_path() which calls the new function with NULL as
    the optional argument.
    2) Ignore any part of the path beyond and including the ':' separator.
    3) Set the new provided pointer argument to the beginning of the string
    following the ':' separator.
    4: Add tests.

    Signed-off-by: Leif Lindholm
    Signed-off-by: Grant Likely

    Leif Lindholm
     

02 Dec, 2014

2 commits

  • This patch extends of_dma_configure so that it sets up the IOMMU for a
    device, as well as the coherent/non-coherent DMA mapping ops.

    Acked-by: Arnd Bergmann
    Acked-by: Marek Szyprowski
    Tested-by: Robin Murphy
    Signed-off-by: Will Deacon

    Will Deacon
     
  • set_arch_dma_coherent_ops is called from of_dma_configure in order to
    swizzle the architectural dma-mapping functions over to a cache-coherent
    implementation. This is currently implemented only for ARM.

    In anticipation of re-using this mechanism for IOMMU-backed dma-mapping
    ops too, this patch replaces the function with a broader
    arch_setup_dma_ops callback which will be extended in future.

    Acked-by: Arnd Bergmann
    Acked-by: Marek Szyprowski
    Tested-by: Robin Murphy
    Signed-off-by: Will Deacon

    Will Deacon
     

28 Nov, 2014

2 commits


26 Nov, 2014

2 commits

  • The OF_OVERLAY option selects OF_DEVICE, but OF_DEVICE was removed in
    commit ba166e900b, "of: remove CONFIG_OF_DEVICE". Remove the unnecessary
    select.

    Signed-off-by: Grant Likely
    Reported-by: Paul Bolle
    Cc: Pantelis Antoniou

    Grant Likely
     
  • memblock_is_region_reserved() returns true in the case of a partial
    overlap, meaning that the current code fails to reserve the
    non-overlapping portion.

    This call was introduced as part of d1552ce449eb "of/fdt: move
    memreserve and dtb memory reservations into core" which went into
    v3.16.

    I observed this causing a Midway system with a buggy fdt (the header
    declares itself to be larger than it really is) failing to boot
    because the over-inflated size of the fdt was causing it to seem to
    run into the swapper_pg_dir region, meaning the DT wasn't reserved.
    The symptoms were failing to find an disks or network and failing to
    boot.

    However given the ambiguity of whether things like the initrd are
    covered by /memreserve/ and similar I think it is best to also
    register the region rather than just ignoring it.

    Since memblock_reserve() handles overlaps just fine lets just warn and
    carry on.

    Signed-off-by: Ian Campbell
    Signed-off-by: Grant Likely
    Cc: Rob Herring
    Cc: stable@vger.kernel.org # v3.16+

    Ian Campbell
     

25 Nov, 2014

9 commits

  • Add unittests for OF overlays.

    It tests overlay device addition/removal and whether
    the apply revert sequence is correct.

    Changes since V1:
    * Added local fixups entries.

    Signed-off-by: Pantelis Antoniou
    Signed-off-by: Grant Likely

    Pantelis Antoniou
     
  • Overlays are a method to dynamically modify part of the kernel's
    device tree with dynamically loaded data. Add the core functionality to
    parse, apply and remove an overlay changeset. The core functionality
    takes care of managing the overlay data format and performing the add
    and remove. Drivers are expected to use the overlay functionality to
    support custom expansion busses commonly found on consumer development
    boards like the BeagleBone or Raspberry Pi.

    The overlay code uses CONFIG_OF_DYNAMIC changesets to perform the low
    level work of modifying the devicetree.

    Documentation about internal and APIs is provided in
    Documentation/devicetree/overlay-notes.txt

    v2:
    - Switch from __of_node_alloc() to __of_node_dup()
    - Documentation fixups
    - Remove 2-pass processing of properties
    - Remove separate ov_lock; just use the DT mutex.
    v1:
    - Drop delete capability using '-' prefix. The '-' prefixed names
    are valid properties and nodes and there is no need for it just yet.
    - Do not update special properties - name & phandle ones.
    - Change order of node attachment, so that the special property update
    works.

    Signed-off-by: Pantelis Antoniou
    Signed-off-by: Grant Likely

    Pantelis Antoniou
     
  • Add OF notifier handler needed for creating/destroying platform devices
    according to dynamic runtime changes in the DT live tree.

    Signed-off-by: Pantelis Antoniou
    Signed-off-by: Grant Likely

    Pantelis Antoniou
     
  • The OF_RECONFIG notifier callback uses a different structure depending
    on whether it is a node change or a property change. This is silly, and
    not very safe. Rework the code to use the same data structure regardless
    of the type of notifier.

    Signed-off-by: Grant Likely
    Cc: Benjamin Herrenschmidt
    Cc: Rob Herring
    Cc: Pantelis Antoniou
    Cc:

    Grant Likely
     
  • Add some additional debug output to cover OF_RECONFIG notifier activity.
    At the same time, refactor the changeset debug output to use the same
    strings as the notifier debug output.

    Signed-off-by: Grant Likely

    Grant Likely
     
  • Introduce of_reconfig_get_state_change() which allows an of notifier
    to query about device state changes.

    Signed-off-by: Pantelis Antoniou
    Signed-off-by: Grant Likely

    Pantelis Antoniou
     
  • The original resolver format is way too cryptic, switch
    to using a tree based format that gets rid of repetitions,
    is more compact and readable.

    At the same time, update the selftests to using the new local fixups
    format.

    Signed-off-by: Pantelis Antoniou
    [grant.likely: Squashed in testcase changes and merged similar functions]
    Signed-off-by: Grant Likely

    Pantelis Antoniou
     
  • Add a node argument to __of_node_alloc() and rename it to
    __of_node_dup() so that it can also be used to duplicate a node with
    its properties. This is important for the overlay code so that it can
    create new nodes without using separate changeset items for every single
    property.

    At the same time rework the overlay code to use the new function and
    drop the extra changeset items.

    Signed-off-by: Grant Likely

    Grant Likely
     
  • The overlay code needs to construct a new full_name from the parent name
    and the node name, but the current method has to allocate and then free
    an temporary string which is wasteful. Fix this problem by using vargs
    to pass in a format and arguments into __of_node_alloc().

    At the same time remove the allocflags argument to __of_node_alloc().
    The only users all use GFP_KERNEL, so there is no need to provide it as
    an option. If there is ever a need later it can be added back.

    Signed-off-by: Grant Likely

    Grant Likely
     

24 Nov, 2014

1 commit

  • v3.18-rc6 contains an important DT bug fix, c1a2086e2d, "of/selftest:
    Fix off-by-one error in removal path" which affects testing of the
    overlay patch series. Merge it into the devicetree/next staging branch
    so that the overlay patches are applied on top of a known working tree.

    Linux 3.18-rc6

    Conflicts:
    drivers/of/address.c

    Grant Likely
     

20 Nov, 2014

3 commits

  • The /aliases node isn't always present in the device tree, but the
    unittest code assumes that /aliases is there. Add a check when inserting
    the testcase data to see if of_aliases needs to be updated, and undo the
    settings when the nodes are removed.

    Signed-off-by: Grant Likely
    Cc: Rob Herring
    Cc: Gaurav Minocha
    Cc:

    Grant Likely
     
  • of_platform_populate() takes a subset of the device tree and turns it
    into a set of platform_devices. At the same time it sets the
    OF_POPULATED_BUS flag in each bus nodes so that of_platform_depopulate()
    can undo the operation at a later time. However, it doesn't set the flag
    on the root of the population tree which means that dynamic modifications
    of the device tree at runtime will not create/destroy devices correctly.

    Fix of_platform_populate() to set the OF_POPULATED_BUS flag on the node
    it is called with.

    Signed-off-by: Grant Likely
    Cc: Rob Herring
    Cc: Pantelis Antoniou
    Cc: Pawel Moll

    Grant Likely
     
  • The removal path for selftest data has an off by one error that causes
    the code to dereference beyond the end of the nodes[] array on the first
    pass through. The old code only worked by chance on a lot of platforms,
    but the bug was recently exposed on aarch64.

    The fix is simple. Decrement the node count before dereferencing, not
    after.

    Reported-by: Kevin Hilman
    Cc: Rob Herring
    Cc: Gaurav Minocha
    Cc: # v3.17+

    Grant Likely
     

19 Nov, 2014

7 commits

  • Create a new /sys entry '/sys/firmware/fdt' to export the FDT blob
    that was passed to the kernel by the bootloader. This allows userland
    applications such as kexec to access the raw binary.

    The fact that this node does not reside under /sys/firmware/device-tree
    is deliberate: FDT is also used on arm64 UEFI/ACPI systems to
    communicate just the UEFI and ACPI entry points, but the FDT is never
    unflattened and used to configure the system.

    A CRC32 checksum is calculated over the entire FDT blob, and verified
    at late_initcall time. The sysfs entry is instantiated only if the
    checksum is valid, i.e., if the FDT blob has not been modified in the
    mean time. Otherwise, a warning is printed.

    Signed-off-by: Ard Biesheuvel
    Signed-off-by: Grant Likely

    Ard Biesheuvel
     
  • We have a historical hack that treats missing ranges properties as the
    equivalent of an empty one. This is needed for ancient PowerMac "bad"
    device-trees, and shouldn't be enabled for any other PowerPC platform,
    otherwise we get some nasty layout of devices in sysfs or even
    duplication when a set of otherwise identically named devices is
    created multiple times under a different parent node with no ranges
    property.

    This fix is needed for the PowerNV i2c busses to be exposed properly
    and will fix a number of other embedded cases.

    Signed-off-by: Benjamin Herrenschmidt
    CC:
    Acked-by: Grant Likely
    Signed-off-by: Rob Herring

    Benjamin Herrenschmidt
     
  • __earlycon_of_table_sentinel.compatible is a char[128], not a pointer, so
    it will never be NULL. Checking it against NULL causes the match loop to
    run past the end of the array, and eventually match a bogus entry, under
    the following conditions:

    - Kernel command line specifies "earlycon" with no parameters
    - DT has a stdout-path pointing to a UART node
    - The UART driver doesn't use OF_EARLYCON_DECLARE (or maybe the console
    driver is compiled out)

    Fix this by checking to see if match->compatible is a non-empty string.

    Signed-off-by: Kevin Cernekee
    Cc: # 3.16+
    Signed-off-by: Rob Herring

    Kevin Cernekee
     
  • Signed-off-by: Geert Uytterhoeven
    Cc: Grant Likely
    Cc: Rob Herring
    Signed-off-by: Rob Herring

    Geert Uytterhoeven
     
  • This function can only return true or false; using a bool makes it more
    obvious to the reader.

    Signed-off-by: Kevin Cernekee
    Signed-off-by: Grant Likely

    Kevin Cernekee
     
  • This function passes back a value from __of_device_is_compatible(), which
    returns a score in the range 0..11, not a bool.

    Signed-off-by: Kevin Cernekee
    Signed-off-by: Grant Likely

    Kevin Cernekee
     
  • The core always tries to translate any "reg" property to construct the platform
    device names. This results in a pile of "OF: no ranges; cannot translate" errors
    in dmesg whenever we expose things like i2c devices that cannot directly translate
    to the MMIO space.

    Turn this into a pr_debug instead

    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Grant Likely

    Benjamin Herrenschmidt
     

12 Nov, 2014

1 commit

  • "msi_chip" isn't very descriptive, so rename it to "msi_controller". That
    tells a little more about what it does and is already used in device tree
    bindings.

    No functional change.

    [bhelgaas: changelog, change *only* the struct name so it's reviewable]
    Suggested-by: Bjorn Helgaas
    Signed-off-by: Yijing Wang
    Signed-off-by: Bjorn Helgaas

    Yijing Wang
     

10 Nov, 2014

1 commit


05 Nov, 2014

2 commits

  • Add a uniform interface by which device drivers can request device
    properties from the platform firmware by providing a property name
    and the corresponding data type. The purpose of it is to help to
    write portable code that won't depend on any particular platform
    firmware interface.

    The following general helper functions are added:

    device_property_present()
    device_property_read_u8()
    device_property_read_u16()
    device_property_read_u32()
    device_property_read_u64()
    device_property_read_string()
    device_property_read_u8_array()
    device_property_read_u16_array()
    device_property_read_u32_array()
    device_property_read_u64_array()
    device_property_read_string_array()

    The first one allows the caller to check if the given property is
    present. The next 5 of them allow single-valued properties of
    various types to be retrieved in a uniform way. The remaining 5 are
    for reading properties with multiple values (arrays of either numbers
    or strings).

    The interface covers both ACPI and Device Trees.

    This change set includes material from Mika Westerberg and Aaron Lu.

    Signed-off-by: Aaron Lu
    Signed-off-by: Mika Westerberg
    Acked-by: Greg Kroah-Hartman
    Acked-by: Grant Likely
    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     
  • Currently the devices created by drivers/of/platform.c get created at
    the root of /sys/devices. This goes against the typical pattern for
    sysfs where the top level /sys/devices structure contains categories of
    devices, and the structure of devices is placed below that. To fix this,
    make the code in drivers/of/platform.c follow the drivers/base/platform.c
    behaviour, and use &platform_bus as the default parent for all new
    platform_devices and amba_devices.

    This change has been discussed for a long time, but nobody has actually
    acted on it. Userspace code that expects to find devices under a fixed
    /sys/devices/... path will be affected. It isn't /supposed/ to do that,
    but if anyone complains then I'll add a default-off workaround option to
    put them back into the root.

    Signed-off-by: Grant Likely
    Acked-by: Benjamin Herrenschmidt
    Acked-by: Greg Kroah-Hartman
    Cc: Rob Herring
    Cc: Arnd Bergmann

    Grant Likely