1. 01 7月, 2020 1 次提交
  2. 19 6月, 2020 1 次提交
    • F
      net: dsa: bcm_sf2: Fix node reference count · 8dbe4c5d
      Florian Fainelli 提交于
      of_find_node_by_name() will do an of_node_put() on the "from" argument.
      With CONFIG_OF_DYNAMIC enabled which checks for device_node reference
      counts, we would be getting a warning like this:
      
      [    6.347230] refcount_t: increment on 0; use-after-free.
      [    6.352498] WARNING: CPU: 3 PID: 77 at lib/refcount.c:156
      refcount_inc_checked+0x38/0x44
      [    6.360601] Modules linked in:
      [    6.363661] CPU: 3 PID: 77 Comm: kworker/3:1 Tainted: G        W
      5.4.46-gb78b3e9956e6 #13
      [    6.372546] Hardware name: BCM97278SV (DT)
      [    6.376649] Workqueue: events deferred_probe_work_func
      [    6.381796] pstate: 60000005 (nZCv daif -PAN -UAO)
      [    6.386595] pc : refcount_inc_checked+0x38/0x44
      [    6.391133] lr : refcount_inc_checked+0x38/0x44
      ...
      [    6.478791] Call trace:
      [    6.481243]  refcount_inc_checked+0x38/0x44
      [    6.485433]  kobject_get+0x3c/0x4c
      [    6.488840]  of_node_get+0x24/0x34
      [    6.492247]  of_irq_find_parent+0x3c/0xe0
      [    6.496263]  of_irq_parse_one+0xe4/0x1d0
      [    6.500191]  irq_of_parse_and_map+0x44/0x84
      [    6.504381]  bcm_sf2_sw_probe+0x22c/0x844
      [    6.508397]  platform_drv_probe+0x58/0xa8
      [    6.512413]  really_probe+0x238/0x3fc
      [    6.516081]  driver_probe_device+0x11c/0x12c
      [    6.520358]  __device_attach_driver+0xa8/0x100
      [    6.524808]  bus_for_each_drv+0xb4/0xd0
      [    6.528650]  __device_attach+0xd0/0x164
      [    6.532493]  device_initial_probe+0x24/0x30
      [    6.536682]  bus_probe_device+0x38/0x98
      [    6.540524]  deferred_probe_work_func+0xa8/0xd4
      [    6.545061]  process_one_work+0x178/0x288
      [    6.549078]  process_scheduled_works+0x44/0x48
      [    6.553529]  worker_thread+0x218/0x270
      [    6.557285]  kthread+0xdc/0xe4
      [    6.560344]  ret_from_fork+0x10/0x18
      [    6.563925] ---[ end trace 68f65caf69bb152a ]---
      
      Fix this by adding a of_node_get() to increment the reference count
      prior to the call.
      
      Fixes: afa3b592 ("net: dsa: bcm_sf2: Ensure correct sub-node is parsed")
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Reviewed-by: NAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8dbe4c5d
  3. 07 4月, 2020 2 次提交
  4. 31 3月, 2020 1 次提交
  5. 28 2月, 2020 1 次提交
  6. 27 2月, 2020 2 次提交
  7. 17 2月, 2020 1 次提交
  8. 07 2月, 2020 1 次提交
  9. 17 1月, 2020 1 次提交
  10. 06 11月, 2019 2 次提交
  11. 05 11月, 2019 1 次提交
    • A
      net: of_get_phy_mode: Change API to solve int/unit warnings · 0c65b2b9
      Andrew Lunn 提交于
      Before this change of_get_phy_mode() returned an enum,
      phy_interface_t. On error, -ENODEV etc, is returned. If the result of
      the function is stored in a variable of type phy_interface_t, and the
      compiler has decided to represent this as an unsigned int, comparision
      with -ENODEV etc, is a signed vs unsigned comparision.
      
      Fix this problem by changing the API. Make the function return an
      error, or 0 on success, and pass a pointer, of type phy_interface_t,
      where the phy mode should be stored.
      
      v2:
      Return with *interface set to PHY_INTERFACE_MODE_NA on error.
      Add error checks to all users of of_get_phy_mode()
      Fixup a few reverse christmas tree errors
      Fixup a few slightly malformed reverse christmas trees
      
      v3:
      Fix 0-day reported errors.
      Reported-by: NDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: NAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0c65b2b9
  12. 02 11月, 2019 1 次提交
  13. 29 10月, 2019 1 次提交
  14. 23 10月, 2019 1 次提交
  15. 22 8月, 2019 1 次提交
  16. 21 8月, 2019 1 次提交
    • V
      net: dsa: do not enable or disable non user ports · 74be4bab
      Vivien Didelot 提交于
      The .port_enable and .port_disable operations are currently only
      called for user ports, hence assuming they have a slave device. In
      preparation for using these operations for other port types as well,
      simply guard all implementations against non user ports and return
      directly in such case.
      
      Note that bcm_sf2_sw_suspend() currently calls bcm_sf2_port_disable()
      (and thus b53_disable_port()) against the user and CPU ports, so do
      not guards those functions. They will be called for unused ports in
      the future, but that was expected by those drivers anyway.
      Signed-off-by: NVivien Didelot <vivien.didelot@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      74be4bab
  17. 02 8月, 2019 1 次提交
  18. 31 5月, 2019 1 次提交
  19. 22 3月, 2019 1 次提交
  20. 25 2月, 2019 1 次提交
  21. 16 2月, 2019 1 次提交
  22. 14 2月, 2019 1 次提交
  23. 09 2月, 2019 3 次提交
  24. 28 12月, 2018 1 次提交
  25. 07 11月, 2018 3 次提交
    • F
      net: dsa: bcm_sf2: Turn on PHY to allow successful registration · c04a17d2
      Florian Fainelli 提交于
      We are binding to the PHY using the SF2 slave MDIO bus that we create,
      binding involves reading the PHY's MII_PHYSID1/2 which won't be possible
      if the PHY is turned off. Temporarily turn it on/off for the bus probing
      to succeeed. This fixes unbind/bind problems where the port connecting
      to that PHY would be in error since it could not connect to it.
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c04a17d2
    • F
      net: dsa: bcm_sf2: Restore CFP rules during system resume · 1c0130f0
      Florian Fainelli 提交于
      The hardware can lose its context during system suspend, and depending
      on the switch generation (7445 vs. 7278), while the rules are still
      there, they will have their valid bit cleared (because that's the
      fastest way for the HW to reset things). Just make sure we re-apply them
      coming back from resume. The 7445 switch is an older version of the core
      that has some quirky RAM technology requiring a delete then re-inser to
      guarantee the RAM entries are properly latched.
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1c0130f0
    • F
      net: dsa: bcm_sf2: Keep copy of inserted rules · ae7a5aff
      Florian Fainelli 提交于
      We tried hard to use the hardware as a storage area, which made things
      needlessly complex in that we had to both marshall and unmarshall the
      ethtool_rx_flow_spec into what the CFP hardware understands but it did
      not require any driver level allocations, so that was nice.
      
      Keep a copy of the ethtool_rx_flow_spec rule we want to insert, and also
      make sure we don't have a duplicate rule already. This greatly speeds up
      the deletion time since we only need to clear the slice's valid bit and
      not perform a full read.
      
      This is a preparatory step for being able to restore rules upon system
      resumption where the hardware loses its context partially or entirely.
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ae7a5aff
  26. 22 10月, 2018 1 次提交
  27. 12 10月, 2018 2 次提交
    • F
      net: dsa: bcm_sf2: Call setup during switch resume · 54baca09
      Florian Fainelli 提交于
      There is no reason to open code what the switch setup function does, in
      fact, because we just issued a switch reset, we would make all the
      register get their default values, including for instance, having unused
      port be enabled again and wasting power and leading to an inappropriate
      switch core clock being selected.
      
      Fixes: 8cfa9498 ("net: dsa: bcm_sf2: add suspend/resume callbacks")
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      54baca09
    • F
      net: dsa: bcm_sf2: Fix unbind ordering · bf3b452b
      Florian Fainelli 提交于
      The order in which we release resources is unfortunately leading to bus
      errors while dismantling the port. This is because we set
      priv->wol_ports_mask to 0 to tell bcm_sf2_sw_suspend() that it is now
      permissible to clock gate the switch. Later on, when dsa_slave_destroy()
      comes in from dsa_unregister_switch() and calls
      dsa_switch_ops::port_disable, we perform the same dismantling again, and
      this time we hit registers that are clock gated.
      
      Make sure that dsa_unregister_switch() is the first thing that happens,
      which takes care of releasing all user visible resources, then proceed
      with clock gating hardware. We still need to set priv->wol_ports_mask to
      0 to make sure that an enabled port properly gets disabled in case it
      was previously used as part of Wake-on-LAN.
      
      Fixes: d9338023 ("net: dsa: bcm_sf2: Make it a real platform device driver")
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      bf3b452b
  28. 11 10月, 2018 2 次提交
    • F
      net: dsa: bcm_sf2: Call setup during switch resume · abd01ba2
      Florian Fainelli 提交于
      There is no reason to open code what the switch setup function does, in
      fact, because we just issued a switch reset, we would make all the
      register get their default values, including for instance, having unused
      port be enabled again and wasting power and leading to an inappropriate
      switch core clock being selected.
      
      Fixes: 8cfa9498 ("net: dsa: bcm_sf2: add suspend/resume callbacks")
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      abd01ba2
    • F
      net: dsa: bcm_sf2: Fix unbind ordering · 448765e1
      Florian Fainelli 提交于
      The order in which we release resources is unfortunately leading to bus
      errors while dismantling the port. This is because we set
      priv->wol_ports_mask to 0 to tell bcm_sf2_sw_suspend() that it is now
      permissible to clock gate the switch. Later on, when dsa_slave_destroy()
      comes in from dsa_unregister_switch() and calls
      dsa_switch_ops::port_disable, we perform the same dismantling again, and
      this time we hit registers that are clock gated.
      
      Make sure that dsa_unregister_switch() is the first thing that happens,
      which takes care of releasing all user visible resources, then proceed
      with clock gating hardware. We still need to set priv->wol_ports_mask to
      0 to make sure that an enabled port properly gets disabled in case it
      was previously used as part of Wake-on-LAN.
      
      Fixes: d9338023 ("net: dsa: bcm_sf2: Make it a real platform device driver")
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      448765e1
  29. 17 9月, 2018 1 次提交
  30. 04 8月, 2018 1 次提交
  31. 04 7月, 2018 1 次提交