1. 17 10月, 2017 3 次提交
  2. 04 10月, 2017 1 次提交
    • R
      of/fdt: only store the device node basename in full_name · a7e4cfb0
      Rob Herring 提交于
      With dependencies on a statically allocated full path name converted to
      use %pOF format specifier, we can store just the basename of node, and
      the unflattening of the FDT can be simplified.
      
      This commit will affect the remaining users of full_name. After
      analyzing these users, the remaining cases should only change some print
      messages. The main users of full_name are providing a name for struct
      resource. The resource names shouldn't be important other than providing
      /proc/iomem names.
      
      We no longer distinguish between pre and post 0x10 dtb formats as either
      a full path or basename will work. However, less than 0x10 formats have
      been broken since the conversion to use libfdt (and no one has cared).
      The conversion of the unflattening code to be non-recursive also broke
      pre 0x10 formats as the populate_node function would return 0 in that
      case.
      Signed-off-by: NRob Herring <robh@kernel.org>
      a7e4cfb0
  3. 05 9月, 2017 1 次提交
  4. 01 9月, 2017 1 次提交
    • R
      of: restrict DMA configuration · 72328883
      Robin Murphy 提交于
      Moving DMA configuration to happen later at driver probe time had the
      unnoticed side-effect that we now perform DMA configuration for *every*
      device represented in DT, rather than only those explicitly created by
      the of_platform and PCI code.
      
      As Christoph points out, this is not really the best thing to do. Whilst
      there may well be other DMA-capable buses that can benefit from having
      their children automatically configured after the bridge has probed,
      there are also plenty of others like USB, MDIO, etc. that definitely do
      not support DMA and should not be indiscriminately processed.
      
      The good news is that in most cases the DT "dma-ranges" property serves
      as an appropriate indicator - per a strict interpretation of the spec,
      anything lacking a "dma-ranges" property should be considered not to
      have a mapping of DMA address space from its children to its parent,
      thus anything for which of_dma_get_range() does not succeed does not
      need DMA configuration. Certain bus types have a general expectation of
      DMA capability and carry a well-established precedent that an absent
      "dma-ranges" implies the same as the empty property, so we automatically
      opt those in to DMA configuration regardless, to avoid regressing most
      existing platforms.
      
      Fixes: 09515ef5 ("of/acpi: Configure dma operations at probe time for platform/amba/pci bus devices")
      Reported-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NRobin Murphy <robin.murphy@arm.com>
      Acked-by: NRob Herring <robh@kernel.org>
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      72328883
  5. 25 8月, 2017 3 次提交
    • A
      of: Use PLATFORM_DEVID_NONE definition · 6d7e3bf8
      Andy Shevchenko 提交于
      Use dedicated definition instead of plain -1 where it's appropriate.
      
      No functional change intended.
      Signed-off-by: NAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: NRob Herring <robh@kernel.org>
      6d7e3bf8
    • B
      of/device: Fix of_device_get_modalias() buffer handling · 8c2a75e5
      Bjorn Andersson 提交于
      of_device_request_module() calls of_device_get_modalias() with "len" 0,
      to calculate the size of the buffer needed to store the result, but due
      to integer promotion the ssize_t "len" will be compared as unsigned with
      strlen(compat) and the loop will generally never break. This results in
      a call to snprintf() with a negative len, which triggers below warning,
      followed by a dereference of a invalid pointer:
      
        [    3.060067] WARNING: CPU: 0 PID: 51 at lib/vsprintf.c:2122 vsnprintf+0x348/0x6d8
        ...
        [    3.060301] [<ffffff800891ede8>] vsnprintf+0x348/0x6d8
        [    3.060308] [<ffffff800891f248>] snprintf+0x48/0x50
        [    3.060316] [<ffffff80086a7c80>] of_device_get_modalias+0x108/0x160
        [    3.060322] [<ffffff80086a7cf8>] of_device_request_module+0x20/0x88
        ...
      
      Further more of_device_get_modalias() is supposed to return the number
      of bytes needed to store the entire modalias, so the loop needs to
      continue accumulate the total size even though the buffer is full.
      
      Finally the function is not expected to ensure space for the NUL, nor
      include it in the returned size, so only 1 should be added to the length
      of "compat" in the loop (to account for the character 'C').
      
      Fixes: bc575064 ("of/device: use of_property_for_each_string to parse compatible strings")
      Cc: Rob Herring <robh@kernel.org>
      Signed-off-by: NBjorn Andersson <bjorn.andersson@linaro.org>
      Signed-off-by: NRob Herring <robh@kernel.org>
      8c2a75e5
    • B
      of/device: Prevent buffer overflow in of_device_modalias() · 08ab58d9
      Bjorn Andersson 提交于
      As of_device_get_modalias() returns the number of bytes that would have
      been written to the target string, regardless of how much did fit in the
      buffer, it's possible that the returned index points beyond the buffer
      passed to of_device_modalias() - causing memory beyond the buffer to be
      null terminated.
      
      Fixes: 0634c295 ("of: Add function for generating a DT modalias with a newline")
      Cc: Rob Herring <robh@kernel.org>
      Cc: stable@vger.kernel.org
      Signed-off-by: NBjorn Andersson <bjorn.andersson@linaro.org>
      Signed-off-by: NRob Herring <robh@kernel.org>
      08ab58d9
  6. 17 8月, 2017 1 次提交
    • R
      of: fix DMA mask generation · ee7b1f31
      Robin Murphy 提交于
      Historically, DMA masks have suffered some ambiguity between whether
      they represent the range of physical memory a device can access, or the
      address bits a device is capable of driving, particularly since on many
      platforms the two are equivalent. Whilst there are some stragglers left
      (dma_max_pfn(), I'm looking at you...), the majority of DMA code has
      been cleaned up to follow the latter definition, not least since it is
      the only one which makes sense once IOMMUs are involved.
      
      In this respect, of_dma_configure() has always done the wrong thing in
      how it generates initial masks based on "dma-ranges". Although rounding
      down did not affect the TI Keystone platform where dma_addr + size is
      already a power of two, in any other case it results in a mask which is
      at best unnecessarily constrained and at worst unusable.
      
      BCM2837 illustrates the problem nicely, where we have a DMA base of 3GB
      and a size of 1GB - 16MB, giving dma_addr + size = 0xff000000 and a
      resultant mask of 0x7fffffff, which is then insufficient to even cover
      the necessary offset, effectively making all DMA addresses out-of-range.
      This has been hidden until now (mostly because we don't yet prevent
      drivers from simply overwriting this initial mask later upon probe), but
      due to recent changes elsewhere now shows up as USB being broken on
      Raspberry Pi 3.
      
      Make it right by rounding up instead of down, such that the mask
      correctly correctly describes all possisble bits the device needs to
      emit.
      
      Fixes: 9a6d7298 ("of: Calculate device DMA masks based on DT dma-range size")
      Reported-by: NStefan Wahren <stefan.wahren@i2se.com>
      Reported-by: NAndreas Färber <afaerber@suse.de>
      Reported-by: NHans Verkuil <hverkuil@xs4all.nl>
      Signed-off-by: NRobin Murphy <robin.murphy@arm.com>
      Acked-by: NRob Herring <robh@kernel.org>
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      ee7b1f31
  7. 15 8月, 2017 1 次提交
  8. 14 8月, 2017 1 次提交
  9. 08 8月, 2017 1 次提交
  10. 02 8月, 2017 2 次提交
  11. 01 8月, 2017 1 次提交
    • T
      device property: Fix usecount for of_graph_get_port_parent() · c0a480d1
      Tony Lindgren 提交于
      Fix inconsistent use of of_graph_get_port_parent() where
      asoc_simple_card_parse_graph_dai() does of_node_get() before
      calling it while other callers do not. We can fix this by
      not trashing the node passed to of_graph_get_port_parent().
      
      Let's also make sure the callers have correct refcounts and remove
      related incorrect of_node_put() calls for of_for_each_phandle
      as that's done by of_phandle_iterator_next() except when
      we break out of the loop early.
      
      Let's fix both issues with a single patch to avoid kobject
      refcounts getting messed up more if two patches are merged
      separately.
      
      Otherwise strange issues can happen caused by memory corruption
      caused by too many kobject_del() calls such as:
      
      BUG: sleeping function called from invalid context at
      kernel/locking/mutex.c:747
      ...
      (___might_sleep)
      (__mutex_lock)
      (mutex_lock_nested)
      (kernfs_remove)
      (kobject_del)
      (kobject_put)
      (of_get_next_parent)
      (of_graph_get_port_parent)
      (asoc_simple_card_parse_graph_dai [snd_soc_simple_card_utils])
      (asoc_graph_card_probe [snd_soc_audio_graph_card])
      
      Fixes: 0ef472a9 ("of_graph: add of_graph_get_port_parent()")
      Fixes: 2692c1c6 ("ASoC: add audio-graph-card support")
      Fixes: 1689333f ("ASoC: simple-card-utils: add asoc_simple_card_parse_graph_dai()")
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      Reviewed-by: NRob Herring <robh@kernel.org>
      Tested-by: NAntonio Borneo <borneo.antonio@gmail.com>
      Tested-by: NKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      c0a480d1
  12. 25 7月, 2017 1 次提交
  13. 24 7月, 2017 4 次提交
  14. 22 7月, 2017 4 次提交
  15. 21 7月, 2017 3 次提交
  16. 20 7月, 2017 3 次提交
    • F
      of: overlay: add overlay symbols to live device tree · d1651b03
      Frank Rowand 提交于
      Add overlay __symbols__ properties to live tree when an overlay
      is added to the live tree so that the symbols are available to
      subsequent overlays.
      
      Expected test result is new __symbols__ entries for labels from
      the overlay after this commit.
      
      Before this commit:
      
         Console error message near end of unittest:
            ### dt-test ### FAIL of_unittest_overlay_high_level():2296 Adding overlay 'overlay_bad_symbol' failed
            ### dt-test ### end of unittest - 190 passed, 1 failed
      
         The new unittest "fails" because the expected result of loading the
         new overlay is an error instead of success.
      
         $ # node hvac-medium-2 exists because the overlay loaded
         $ # since the duplicate symbol was not detected
         $ cd /proc/device-tree/testcase-data-2/substation@100/
         $ ls
         compatible     hvac-medium-2  motor-8        reg
         hvac-large-1   linux,phandle  name           status
         hvac-medium-1  motor-1        phandle
      
         $ cd /proc/device-tree/__symbols__/
         $ ls
         electric_1   lights_1     name         rides_1      spin_ctrl_2
         hvac_1       lights_2     retail_1     spin_ctrl_1
      
      After this commit:
      
         Previous console error message no longer occurs, but expected error
         occurs:
            OF: overlay: Failed to apply prop @/__symbols__/hvac_1
            OF: overlay: apply failed '/__symbols__'
            ### dt-test ### end of unittest - 191 passed, 0 failed
      
         $ # node hvac-medium-2 does not exist because the overlay
         $ # properly failed to load due to the duplicate symbol
         $ cd /proc/device-tree/testcase-data-2/substation@100/
         $ ls
         compatible     hvac-medium-1  motor-1        name           reg
         hvac-large-1   linux,phandle  motor-8        phandle        status
      
         $ cd /proc/device-tree/__symbols__/
         $ ls
         electric_1      lights_1        retail_1        ride_200_right  spin_ctrl_2
         hvac_1          lights_2        ride_200        rides_1
         hvac_2          name            ride_200_left   spin_ctrl_1
         $ cat ride_200; echo
         /testcase-data-2/fairway-1/ride@200
         $ cat ride_200_left ; echo
         /testcase-data-2/fairway-1/ride@200/track@10
         $ cat ride_200_right ; echo
         /testcase-data-2/fairway-1/ride@200/track@20
      Signed-off-by: NFrank Rowand <frank.rowand@sony.com>
      Signed-off-by: NRob Herring <robh@kernel.org>
      d1651b03
    • F
      of: overlay: correctly apply overlay node with unit-address · c1cd1e01
      Frank Rowand 提交于
      Correct existing node name detection when overlay node name has
      a unit-address.
      
      Expected test result is overlay will update the nodes and properties
      for /testcase-data-2/fairway-1/ride@100/ after this commit.
      
      Before this commit:
      
         Console error message near end of unittest:
            OF: Duplicate name in fairway-1, renamed to "ride@100#1"
      
         $ cd /proc/device-tree/testcase-data-2/fairway-1/
         $ # extra node: ride@100#1
         $ ls
         #address-cells  linux,phandle   phandle         ride@200
         #size-cells     name            ride@100        status
         compatible      orientation     ride@100#1
         $ cd /proc/device-tree/testcase-data-2/fairway-1/ride@100/
         $ ls track@30/incline-up
         ls: track@30/incline-up: No such file or directory
         $ ls track@40/incline-up
         ls: track@40/incline-up: No such file or directory
      
      After this commit:
      
         Console error message no longer occurs
      
         $ cd /proc/device-tree/testcase-data-2/fairway-1/
         $ # no extra node: ride@100#1
         $ ls
         #address-cells  compatible      name            phandle         ride@200
         #size-cells     linux,phandle   orientation     ride@100        status
         $ cd /proc/device-tree/testcase-data-2/fairway-1/ride@100/
         $ ls track@30/incline-up
         track@30/incline-up
         $ ls track@40/incline-up
         track@40/incline-up
      Signed-off-by: NFrank Rowand <frank.rowand@sony.com>
      Signed-off-by: NRob Herring <robh@kernel.org>
      c1cd1e01
    • F
      of: overlay: add overlay unittest data for node names and symbols · 60a0004c
      Frank Rowand 提交于
      Add nodes and properties to overlay_base and overlay dts files to
      test for
         - incorrect existing node name detection when overlay node name
           has a unit-address
         - adding overlay __symbols__ properties to live tree when an
           overlay is added to the live tree
      
      The following console messages will appear near the end of unittest
      until the code errors are corrected:
      
         OF: Duplicate name in fairway-1, renamed to "ride@100#1"
      
         ### dt-test ### FAIL of_unittest_overlay_high_level():2296 Adding overlay 'overlay_bad_symbol' failed
      
         ### dt-test ### end of unittest - 190 passed, 1 failed
      Signed-off-by: NFrank Rowand <frank.rowand@sony.com>
      Signed-off-by: NRob Herring <robh@kernel.org>
      60a0004c
  17. 19 7月, 2017 1 次提交
  18. 03 7月, 2017 1 次提交
  19. 28 6月, 2017 1 次提交
    • P
      vsprintf: Add %p extension "%pOF" for device tree · ce4fecf1
      Pantelis Antoniou 提交于
      90% of the usage of device node's full_name is printing it out in a
      kernel message. However, storing the full path for every node is
      wasteful and redundant. With a custom format specifier, we can generate
      the full path at run-time and eventually remove the full path from every
      node.
      
      For instance typical use is:
      	pr_info("Frobbing node %s\n", node->full_name);
      
      Which can be written now as:
      	pr_info("Frobbing node %pOF\n", node);
      
      '%pO' is the base specifier to represent kobjects with '%pOF'
      representing struct device_node. Currently, struct device_node is the
      only supported type of kobject.
      
      More fine-grained control of formatting includes printing the name,
      flags, path-spec name and others, explained in the documentation entry.
      
      Originally written by Pantelis, but pretty much rewrote the core
      function using existing string/number functions. The 2 passes were
      unnecessary and have been removed. Also, updated the checkpatch.pl
      check. The unittest code was written by Grant Likely.
      Signed-off-by: NPantelis Antoniou <pantelis.antoniou@konsulko.com>
      Acked-by: NJoe Perches <joe@perches.com>
      Signed-off-by: NRob Herring <robh@kernel.org>
      ce4fecf1
  20. 23 6月, 2017 6 次提交