Skip to content
  1. Aug 23, 2022
    • Vladimir Oltean's avatar
      net: mscc: ocelot: adjust forwarding domain for CPU ports in a LAG · 291ac151
      Vladimir Oltean authored
      
      
      Currently when we have 2 CPU ports configured for DSA tag_8021q mode and
      we put them in a LAG, a PGID dump looks like this:
      
      PGID_SRC[0] = ports 4,
      PGID_SRC[1] = ports 4,
      PGID_SRC[2] = ports 4,
      PGID_SRC[3] = ports 4,
      PGID_SRC[4] = ports 0, 1, 2, 3, 4, 5,
      PGID_SRC[5] = no ports
      
      (ports 0-3 are user ports, ports 4 and 5 are CPU ports)
      
      There are 2 problems with the configuration above:
      
      - user ports should enable forwarding towards both CPU ports, not just 4,
        and the aggregation PGIDs should prune one CPU port or the other from
        the destination port mask, based on a hash computed from packet headers.
      
      - CPU ports should not be allowed to forward towards themselves and also
        not towards other ports in the same LAG as themselves
      
      The first problem requires fixing up the PGID_SRC of user ports, when
      ocelot_port_assigned_dsa_8021q_cpu_mask() is called. We need to say that
      when a user port is assigned to a tag_8021q CPU port and that port is in
      a LAG, it should forward towards all ports in that LAG.
      
      The second problem requires fixing up the PGID_SRC of port 4, to remove
      ports 4 and 5 (in a LAG) from the allowed destinations.
      
      After this change, the PGID source masks look as follows:
      
      PGID_SRC[0] = ports 4, 5,
      PGID_SRC[1] = ports 4, 5,
      PGID_SRC[2] = ports 4, 5,
      PGID_SRC[3] = ports 4, 5,
      PGID_SRC[4] = ports 0, 1, 2, 3,
      PGID_SRC[5] = no ports
      
      Note that PGID_SRC[5] still looks weird (it should say "0, 1, 2, 3" just
      like PGID_SRC[4] does), but I've tested forwarding through this CPU port
      and it doesn't seem like anything is affected (it appears that PGID_SRC[4]
      is being looked up on forwarding from the CPU, since both ports 4 and 5
      have logical port ID 4). The reason why it looks weird is because
      we've never called ocelot_port_assign_dsa_8021q_cpu() for any user port
      towards port 5 (all user ports are assigned to port 4 which is in a LAG
      with 5).
      
      Since things aren't broken, I'm willing to leave it like that for now
      and just document the oddity.
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      291ac151
    • Vladimir Oltean's avatar
      net: mscc: ocelot: set up tag_8021q CPU ports independent of user port affinity · 36a0bf44
      Vladimir Oltean authored
      This is a partial revert of commit c295f983
      
       ("net: mscc: ocelot:
      switch from {,un}set to {,un}assign for tag_8021q CPU ports"), because
      as it turns out, this isn't how tag_8021q CPU ports under a LAG are
      supposed to work.
      
      Under that scenario, all user ports are "assigned" to the single
      tag_8021q CPU port represented by the logical port corresponding to the
      bonding interface. So one CPU port in a LAG would have is_dsa_8021q_cpu
      set to true (the one whose physical port ID is equal to the logical port
      ID), and the other one to false.
      
      In turn, this makes 2 undesirable things happen:
      
      (1) PGID_CPU contains only the first physical CPU port, rather than both
      (2) only the first CPU port will be added to the private VLANs used by
          ocelot for VLAN-unaware bridging
      
      To make the driver behave in the same way for both bonded CPU ports, we
      need to bring back the old concept of setting up a port as a tag_8021q
      CPU port, and this is what deals with VLAN membership and PGID_CPU
      updating. But we also need the CPU port "assignment" (the user to CPU
      port affinity), and this is what updates the PGID_SRC forwarding rules.
      
      All DSA CPU ports are statically configured for tag_8021q mode when the
      tagging protocol is changed to ocelot-8021q. User ports are "assigned"
      to one CPU port or the other dynamically (this will be handled by a
      future change).
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      36a0bf44
    • Vladimir Oltean's avatar
      net: dsa: use dsa_tree_for_each_cpu_port in dsa_tree_{setup,teardown}_master · 5dc760d1
      Vladimir Oltean authored
      
      
      More logic will be added to dsa_tree_setup_master() and
      dsa_tree_teardown_master() in upcoming changes.
      
      Reduce the indentation by one level in these functions by introducing
      and using a dedicated iterator for CPU ports of a tree.
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      5dc760d1
    • Vladimir Oltean's avatar
      net: dsa: all DSA masters must be down when changing the tagging protocol · f41ec1fd
      Vladimir Oltean authored
      
      
      The fact that the tagging protocol is set and queried from the
      /sys/class/net/<dsa-master>/dsa/tagging file is a bit of a quirk from
      the single CPU port days which isn't aging very well now that DSA can
      have more than a single CPU port. This is because the tagging protocol
      is a switch property, yet in the presence of multiple CPU ports it can
      be queried and set from multiple sysfs files, all of which are handled
      by the same implementation.
      
      The current logic ensures that the net device whose sysfs file we're
      changing the tagging protocol through must be down. That net device is
      the DSA master, and this is fine for single DSA master / CPU port setups.
      
      But exactly because the tagging protocol is per switch [ tree, in fact ]
      and not per DSA master, this isn't fine any longer with multiple CPU
      ports, and we must iterate through the tree and find all DSA masters,
      and make sure that all of them are down.
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      f41ec1fd
    • Vladimir Oltean's avatar
      net: dsa: only bring down user ports assigned to a given DSA master · 7136097e
      Vladimir Oltean authored
      This is an adaptation of commit c0a8a9c2
      
       ("net: dsa: automatically
      bring user ports down when master goes down") for multiple DSA masters.
      When a DSA master goes down, only the user ports under its control
      should go down too, the others can still send/receive traffic.
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      7136097e
    • Vladimir Oltean's avatar
      net: dsa: existing DSA masters cannot join upper interfaces · 4f03dcc6
      Vladimir Oltean authored
      
      
      All the traffic to/from a DSA master is supposed to be distributed among
      its DSA switch upper interfaces, so we should not allow other upper
      device kinds.
      
      An exception to this is DSA_TAG_PROTO_NONE (switches with no DSA tags),
      and in that case it is actually expected to create e.g. VLAN interfaces
      on the master. But for those, netdev_uses_dsa(master) returns false, so
      the restriction doesn't apply.
      
      The motivation for this change is to allow LAG interfaces of DSA masters
      to be DSA masters themselves. We want to restrict the user's degrees of
      freedom by 1: the LAG should already have all DSA masters as lowers, and
      while lower ports of the LAG can be removed, none can be added after the
      fact.
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      4f03dcc6
    • Vladimir Oltean's avatar
      net: bridge: move DSA master bridging restriction to DSA · 920a33cd
      Vladimir Oltean authored
      
      
      When DSA gains support for multiple CPU ports in a LAG, it will become
      mandatory to monitor the changeupper events for the DSA master.
      
      In fact, there are already some restrictions to be imposed in that area,
      namely that a DSA master cannot be a bridge port except in some special
      circumstances.
      
      Centralize the restrictions at the level of the DSA layer as a
      preliminary step.
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Acked-by: default avatarNikolay Aleksandrov <razor@blackwall.org>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      920a33cd
    • Vladimir Oltean's avatar
      net: dsa: don't stop at NOTIFY_OK when calling ds->ops->port_prechangeupper · 0498277e
      Vladimir Oltean authored
      
      
      dsa_slave_prechangeupper_sanity_check() is supposed to enforce some
      adjacency restrictions, and calls ds->ops->port_prechangeupper if the
      driver implements it.
      
      We convert the error code from the port_prechangeupper() call to a
      notifier code, and 0 is converted to NOTIFY_OK, but the caller of
      dsa_slave_prechangeupper_sanity_check() stops at any notifier code
      different from NOTIFY_DONE.
      
      Avoid this by converting back the notifier code to an error code, so
      that both NOTIFY_OK and NOTIFY_DONE will be seen as 0. This allows more
      parallel sanity check functions to be added.
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      0498277e
    • Vladimir Oltean's avatar
      net: dsa: walk through all changeupper notifier functions · 4c3f80d2
      Vladimir Oltean authored
      
      
      Traditionally, DSA has had a single netdev notifier handling function
      for each device type.
      
      For the sake of code cleanliness, we would like to introduce more
      handling functions which do one thing, but the conditions for entering
      these functions start to overlap. Example: a handling function which
      tracks whether any bridges contain both DSA and non-DSA interfaces.
      Either this is placed before dsa_slave_changeupper(), case in which it
      will prevent that function from executing, or we place it after
      dsa_slave_changeupper(), case in which we will prevent it from
      executing. The other alternative is to ignore errors from the new
      handling function (not ideal).
      
      To support this usage, we need to change the pattern. In the new model,
      we enter all notifier handling sub-functions, and exit with NOTIFY_DONE
      if there is nothing to do. This allows the sub-functions to be
      relatively free-form and independent from each other.
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      4c3f80d2
    • Paolo Abeni's avatar
      Merge branch 'vsock-updates-for-so_rcvlowat-handling' · 139b5fbd
      Paolo Abeni authored
      
      
      Arseniy Krasnov says:
      
      ====================
      vsock: updates for SO_RCVLOWAT handling
      
      This patchset includes some updates for SO_RCVLOWAT:
      
      1) af_vsock:
         During my experiments with zerocopy receive, i found, that in some
         cases, poll() implementation violates POSIX: when socket has non-
         default SO_RCVLOWAT(e.g. not 1), poll() will always set POLLIN and
         POLLRDNORM bits in 'revents' even number of bytes available to read
         on socket is smaller than SO_RCVLOWAT value. In this case,user sees
         POLLIN flag and then tries to read data(for example using  'read()'
         call), but read call will be blocked, because  SO_RCVLOWAT logic is
         supported in dequeue loop in af_vsock.c. But the same time,  POSIX
         requires that:
      
         "POLLIN     Data other than high-priority data may be read without
                     blocking.
          POLLRDNORM Normal data may be read without blocking."
      
         See https://www.open-std.org/jtc1/sc22/open/n4217.pdf, page 293.
      
         So, we have, that poll() syscall returns POLLIN, but read call will
         be blocked.
      
         Also in man page socket(7) i found that:
      
         "Since Linux 2.6.28, select(2), poll(2), and epoll(7) indicate a
         socket as readable only if at least SO_RCVLOWAT bytes are available."
      
         I checked TCP callback for poll()(net/ipv4/tcp.c, tcp_poll()), it
         uses SO_RCVLOWAT value to set POLLIN bit, also i've tested TCP with
         this case for TCP socket, it works as POSIX required.
      
         I've added some fixes to af_vsock.c and virtio_transport_common.c,
         test is also implemented.
      
      2) virtio/vsock:
         It adds some optimization to wake ups, when new data arrived. Now,
         SO_RCVLOWAT is considered before wake up sleepers who wait new data.
         There is no sense, to kick waiter, when number of available bytes
         in socket's queue < SO_RCVLOWAT, because if we wake up reader in
         this case, it will wait for SO_RCVLOWAT data anyway during dequeue,
         or in poll() case, POLLIN/POLLRDNORM bits won't be set, so such
         exit from poll() will be "spurious". This logic is also used in TCP
         sockets.
      
      3) vmci/vsock:
         Same as 2), but i'm not sure about this changes. Will be very good,
         to get comments from someone who knows this code.
      
      4) Hyper-V:
         As Dexuan Cui mentioned, for Hyper-V transport it is difficult to
         support SO_RCVLOWAT, so he suggested to disable this feature for
         Hyper-V.
      ====================
      
      Link: https://lore.kernel.org/r/de41de4c-0345-34d7-7c36-4345258b7ba8@sberdevices.ru
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      139b5fbd
    • Arseniy Krasnov's avatar
      vsock_test: POLLIN + SO_RCVLOWAT test · b1346338
      Arseniy Krasnov authored
      
      
      This adds test to check, that when poll() returns POLLIN, POLLRDNORM bits,
      next read call won't block.
      
      Signed-off-by: default avatarArseniy Krasnov <AVKrasnov@sberdevices.ru>
      Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      b1346338
    • Arseniy Krasnov's avatar
      vmci/vsock: check SO_RCVLOWAT before wake up reader · e061aed9
      Arseniy Krasnov authored
      
      
      This adds extra condition to wake up data reader: do it only when number
      of readable bytes >= SO_RCVLOWAT. Otherwise, there is no sense to kick
      user, because it will wait until SO_RCVLOWAT bytes will be dequeued. This
      check is performed in vsock_data_ready().
      
      Signed-off-by: default avatarArseniy Krasnov <AVKrasnov@sberdevices.ru>
      Reviewed-by: default avatarVishnu Dasa <vdasa@vmware.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      e061aed9
    • Arseniy Krasnov's avatar
      virtio/vsock: check SO_RCVLOWAT before wake up reader · 39f1ed33
      Arseniy Krasnov authored
      
      
      This adds extra condition to wake up data reader: do it only when number
      of readable bytes >= SO_RCVLOWAT. Otherwise, there is no sense to kick
      user,because it will wait until SO_RCVLOWAT bytes will be dequeued. This
      check is performed in vsock_data_ready().
      
      Signed-off-by: default avatarArseniy Krasnov <AVKrasnov@sberdevices.ru>
      Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      39f1ed33
    • Arseniy Krasnov's avatar
      vsock: add API call for data ready · f2fdcf67
      Arseniy Krasnov authored
      
      
      This adds 'vsock_data_ready()' which must be called by transport to kick
      sleeping data readers. It checks for SO_RCVLOWAT value before waking
      user, thus preventing spurious wake ups. Based on 'tcp_data_ready()' logic.
      
      Signed-off-by: default avatarArseniy Krasnov <AVKrasnov@sberdevices.ru>
      Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      f2fdcf67
    • Arseniy Krasnov's avatar
      vsock: pass sock_rcvlowat to notify_poll_in as target · ee0b3843
      Arseniy Krasnov authored
      
      
      Passing 1 as the target to notify_poll_in(), we don't honor
      what the user has set via SO_RCVLOWAT, going to set POLLIN
      and POLLRDNORM, even if we don't have the amount of bytes
      expected by the user.
      
      Let's use sock_rcvlowat() to get the right target to pass to
      notify_poll_in();
      
      Signed-off-by: default avatarArseniy Krasnov <AVKrasnov@sberdevices.ru>
      Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      ee0b3843
    • Arseniy Krasnov's avatar
      vmci/vsock: use 'target' in notify_poll_in callback · a274f6ff
      Arseniy Krasnov authored
      
      
      This callback controls setting of POLLIN, POLLRDNORM output bits of poll()
      syscall, but in some cases, it is incorrectly to set it, when socket has
      at least 1 bytes of available data. Use 'target' which is already exists.
      
      Signed-off-by: default avatarArseniy Krasnov <AVKrasnov@sberdevices.ru>
      Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
      Reviewed-by: default avatarVishnu Dasa <vdasa@vmware.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      a274f6ff
    • Arseniy Krasnov's avatar
      virtio/vsock: use 'target' in notify_poll_in callback · e7a3266c
      Arseniy Krasnov authored
      
      
      This callback controls setting of POLLIN, POLLRDNORM output bits of poll()
      syscall, but in some cases, it is incorrectly to set it, when socket has
      at least 1 bytes of available data. Use 'target' which is already exists.
      
      Signed-off-by: default avatarArseniy Krasnov <AVKrasnov@sberdevices.ru>
      Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      e7a3266c
    • Arseniy Krasnov's avatar
      hv_sock: disable SO_RCVLOWAT support · 24764f8d
      Arseniy Krasnov authored
      
      
      For Hyper-V it is quiet difficult to support this socket option,due to
      transport internals, so disable it.
      
      Signed-off-by: default avatarArseniy Krasnov <AVKrasnov@sberdevices.ru>
      Reviewed-by: default avatarDexuan Cui <decui@microsoft.com>
      Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      24764f8d
    • Arseniy Krasnov's avatar
      vsock: SO_RCVLOWAT transport set callback · e38f22c8
      Arseniy Krasnov authored
      
      
      This adds transport specific callback for SO_RCVLOWAT, because in some
      transports it may be difficult to know current available number of bytes
      ready to read. Thus, when SO_RCVLOWAT is set, transport may reject it.
      
      Signed-off-by: default avatarArseniy Krasnov <AVKrasnov@sberdevices.ru>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      e38f22c8
    • Zhengchao Shao's avatar
      net: sched: remove duplicate check of user rights in qdisc · ab485081
      Zhengchao Shao authored
      
      
      In rtnetlink_rcv_msg function, the permission for all user operations
      is checked except the GET operation, which is the same as the checking
      in qdisc. Therefore, remove the user rights check in qdisc.
      
      Signed-off-by: default avatarZhengchao Shao <shaozhengchao@huawei.com>
      Message-Id: <20220819041854.83372-1-shaozhengchao@huawei.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      ab485081
    • Jakub Kicinski's avatar
      Merge branch '10GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue · 97d29b92
      Jakub Kicinski authored
      
      
      Tony Nguyen says:
      
      ====================
      Intel Wired LAN Driver Updates 2022-08-18 (ixgbe)
      
      This series contains updates to ixgbe driver only.
      
      Fabio M. De Francesco replaces kmap() call to page_address() for
      rx_buffer->page().
      
      Jeff Daly adds a manual AN-37 restart to help resolve issues with some link
      partners.
      
      * '10GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue:
        ixgbe: Manual AN-37 for troublesome link partners for X550 SFI
        ixgbe: Don't call kmap() on page allocated with GFP_ATOMIC
      ====================
      
      Link: https://lore.kernel.org/r/20220818223402.1294091-1-anthony.l.nguyen@intel.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      97d29b92
    • Jakub Kicinski's avatar
      Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue · 0134fe85
      Jakub Kicinski authored
      
      
      Tony Nguyen says:
      
      ====================
      Intel Wired LAN Driver Updates 2022-08-18 (ice)
      
      This series contains updates to ice driver only.
      
      Jesse and Anatolii add support for controlling FCS/CRC stripping via
      ethtool.
      
      Anirudh allows for 100M speeds on devices which support it.
      
      Sylwester removes ucast_shared field and the associated dead code related
      to it.
      
      Mikael removes non-inclusive language from the driver.
      
      * '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue:
        ice: remove non-inclusive language
        ice: Remove ucast_shared
        ice: Allow 100M speeds for some devices
        ice: Implement FCS/CRC and VLAN stripping co-existence policy
        ice: Implement control of FCS/CRC stripping
      ====================
      
      Link: https://lore.kernel.org/r/20220818155207.996297-1-anthony.l.nguyen@intel.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      0134fe85
    • Vladimir Oltean's avatar
      net: dsa: tag_8021q: remove old comment regarding dsa_8021q_netdev_ops · b18e04e3
      Vladimir Oltean authored
      Since commit 129bd7ca
      
       ("net: dsa: Prevent usage of NET_DSA_TAG_8021Q
      as tagging protocol"), dsa_8021q_netdev_ops no longer exists, so remove
      the comment that talks about it.
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Link: https://lore.kernel.org/r/20220818143808.2808393-1-vladimir.oltean@nxp.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      b18e04e3
    • Wolfram Sang's avatar
      net_sched: move from strlcpy with unused retval to strscpy · 92f24c6f
      Wolfram Sang authored
      
      
      Follow the advice of the below link and prefer 'strscpy' in this
      subsystem. Conversion is 1:1 because the return value is not used.
      Generated by a coccinelle script.
      
      Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Link: https://lore.kernel.org/r/20220818210228.8635-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      92f24c6f
    • Wolfram Sang's avatar
      openvswitch: move from strlcpy with unused retval to strscpy · 19d1c046
      Wolfram Sang authored
      
      
      Follow the advice of the below link and prefer 'strscpy' in this
      subsystem. Conversion is 1:1 because the return value is not used.
      Generated by a coccinelle script.
      
      Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Link: https://lore.kernel.org/r/20220818210226.8587-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      19d1c046
    • Wolfram Sang's avatar
      ethtool: move from strlcpy with unused retval to strscpy · a71af890
      Wolfram Sang authored
      
      
      Follow the advice of the below link and prefer 'strscpy' in this
      subsystem. Conversion is 1:1 because the return value is not used.
      Generated by a coccinelle script.
      
      Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Link: https://lore.kernel.org/r/20220818210218.8443-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      a71af890
    • Wolfram Sang's avatar
      dsa: move from strlcpy with unused retval to strscpy · e4d44b3d
      Wolfram Sang authored
      
      
      Follow the advice of the below link and prefer 'strscpy' in this
      subsystem. Conversion is 1:1 because the return value is not used.
      Generated by a coccinelle script.
      
      Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Link: https://lore.kernel.org/r/20220818210216.8419-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      e4d44b3d
    • Wolfram Sang's avatar
      net: move from strlcpy with unused retval to strscpy · 70986397
      Wolfram Sang authored
      
      
      Follow the advice of the below link and prefer 'strscpy' in this
      subsystem. Conversion is 1:1 because the return value is not used.
      Generated by a coccinelle script.
      
      Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Link: https://lore.kernel.org/r/20220818210215.8395-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      70986397
    • Wolfram Sang's avatar
      packet: move from strlcpy with unused retval to strscpy · 8fc9d51e
      Wolfram Sang authored
      
      
      Follow the advice of the below link and prefer 'strscpy' in this
      subsystem. Conversion is 1:1 because the return value is not used.
      Generated by a coccinelle script.
      
      Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Link: https://lore.kernel.org/r/20220818210227.8611-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      8fc9d51e
    • Wolfram Sang's avatar
      l2tp: move from strlcpy with unused retval to strscpy · a5afe530
      Wolfram Sang authored
      
      
      Follow the advice of the below link and prefer 'strscpy' in this
      subsystem. Conversion is 1:1 because the return value is not used.
      Generated by a coccinelle script.
      
      Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Link: https://lore.kernel.org/r/20220818210222.8515-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      a5afe530
    • Wolfram Sang's avatar
      ipv6: move from strlcpy with unused retval to strscpy · 7574cc58
      Wolfram Sang authored
      
      
      Follow the advice of the below link and prefer 'strscpy' in this
      subsystem. Conversion is 1:1 because the return value is not used.
      Generated by a coccinelle script.
      
      Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Link: https://lore.kernel.org/r/20220818210220.8491-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      7574cc58
    • Wolfram Sang's avatar
      ipv4: move from strlcpy with unused retval to strscpy · 01e454f2
      Wolfram Sang authored
      
      
      Follow the advice of the below link and prefer 'strscpy' in this
      subsystem. Conversion is 1:1 because the return value is not used.
      Generated by a coccinelle script.
      
      Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Link: https://lore.kernel.org/r/20220818210219.8467-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      01e454f2
    • Wolfram Sang's avatar
      caif: move from strlcpy with unused retval to strscpy · df207b00
      Wolfram Sang authored
      
      
      Follow the advice of the below link and prefer 'strscpy' in this
      subsystem. Conversion is 1:1 because the return value is not used.
      Generated by a coccinelle script.
      
      Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Link: https://lore.kernel.org/r/20220818210214.8371-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      df207b00
    • Wolfram Sang's avatar
      bridge: move from strlcpy with unused retval to strscpy · 993e1634
      Wolfram Sang authored
      
      
      Follow the advice of the below link and prefer 'strscpy' in this
      subsystem. Conversion is 1:1 because the return value is not used.
      Generated by a coccinelle script.
      
      Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Acked-by: default avatarNikolay Aleksandrov <razor@blackwall.org>
      Link: https://lore.kernel.org/r/20220818210212.8347-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      993e1634
    • Wolfram Sang's avatar
      ax25: move from strlcpy with unused retval to strscpy · 6164b5e3
      Wolfram Sang authored
      
      
      Follow the advice of the below link and prefer 'strscpy' in this
      subsystem. Conversion is 1:1 because the return value is not used.
      Generated by a coccinelle script.
      
      Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Link: https://lore.kernel.org/r/20220818210206.8299-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      6164b5e3
    • Wolfram Sang's avatar
      vlan: move from strlcpy with unused retval to strscpy · bb4d15df
      Wolfram Sang authored
      
      
      Follow the advice of the below link and prefer 'strscpy' in this
      subsystem. Conversion is 1:1 because the return value is not used.
      Generated by a coccinelle script.
      
      Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Link: https://lore.kernel.org/r/20220818210204.8275-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      bb4d15df
    • Wolfram Sang's avatar
      isdn: move from strlcpy with unused retval to strscpy · cdb27b7b
      Wolfram Sang authored
      
      
      Follow the advice of the below link and prefer 'strscpy' in this
      subsystem. Conversion is 1:1 because the return value is not used.
      Generated by a coccinelle script.
      
      Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Link: https://lore.kernel.org/r/20220818210023.6889-1-wsa+renesas@sang-engineering.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      cdb27b7b
    • Jakub Kicinski's avatar
      Merge branch 'validate-of-nodes-for-dsa-shared-ports' · 706447f0
      Jakub Kicinski authored
      
      
      Vladimir Oltean says:
      
      ====================
      Validate OF nodes for DSA shared ports
      
      This is the first set of measures taken so that more drivers can be
      transitioned towards phylink on shared (CPU and DSA) ports some time in
      the future. It consists of:
      
      - expanding the DT schema for DSA and related drivers to clarify the new
        requirements.
      
      - introducing warnings for drivers that currently skip phylink due to
        incomplete DT descriptions.
      
      - introducing warning for drivers that currently skip phylink due to
        using platform data (search for struct dsa_chip_data).
      
      - closing the possibility for new(ish) drivers to skip phylink, by
        validating their DT descriptions.
      
      - making the code paths used by shared ports more evident.
      
      - preparing the code paths used by shared ports for further work to fake
        a link description where that is possible.
      
      More details in patch 10/10.
      
      DT binding (patches 1-6) and kernel (7-10) are in principle separable,
      but are submitted together since they're part of the same story.
      
      Patches 8 and 9 are DSA cleanups, and patch 7 is a dependency for patch
      10.
      
      v1 at
      https://patchwork.kernel.org/project/netdevbpf/patch/20220723164635.1621911-1-vladimir.oltean@nxp.com/
      
      v2 at
      https://patchwork.kernel.org/project/netdevbpf/patch/20220729132119.1191227-5-vladimir.oltean@nxp.com/
      
      v3 at
      https://patchwork.kernel.org/project/netdevbpf/cover/20220806141059.2498226-1-vladimir.oltean@nxp.com/
      ====================
      
      Link: https://lore.kernel.org/r/20220818115500.2592578-1-vladimir.oltean@nxp.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      706447f0
    • Vladimir Oltean's avatar
      net: dsa: make phylink-related OF properties mandatory on DSA and CPU ports · e09e9873
      Vladimir Oltean authored
      Early DSA drivers were kind of simplistic in that they assumed a fairly
      narrow hardware layout. User ports would have integrated PHYs at an
      internal MDIO address that is derivable from the port number, and shared
      (DSA and CPU) ports would have an MII-style (serial or parallel)
      connection to another MAC. Phylib and then phylink were used to drive
      the internal PHYs, and this needed little to no description through the
      platform data structures. Bringing up the shared ports at the maximum
      supported link speed was the responsibility of the drivers.
      
      As a result of this, when these early drivers were converted from
      platform data to the new DSA OF bindings, there was no link information
      translated into the first DT bindings.
      
      https://lore.kernel.org/all/YtXFtTsf++AeDm1l@lunn.ch/
      
      Later, phylink was adopted for shared ports as well, and today we have a
      workaround in place, introduced by commit a20f9970 ("net: dsa: Don't
      instantiate phylink for CPU/DSA ports unless needed"). There, DSA checks
      for the presence of phy-handle/fixed-link/managed OF properties, and if
      missing, phylink registration would be skipped. This is because phylink
      is optional for some drivers (the shared ports already work without it),
      but the process of starting to register a port with phylink is
      irreversible: if phylink_create() fails to find the fwnode properties it
      needs, it bails out and it leaves the ports inoperational (because
      phylink expects ports to be initially down, so DSA necessarily takes
      them down, and doesn't know how to put them back up again).
      
      DSA being a common framework, new drivers opt into this workaround
      willy-nilly, but the ideal behavior from the DSA core's side would have
      been to not interfere with phylink's process of failing at all. This
      isn't possible because of regression concerns with pre-phylink DT blobs,
      but at least DSA should put a stop to the proliferation of more of such
      cases that rely on the workaround to skip phylink registration, and
      sanitize the environment that new drivers work in.
      
      To that end, create a list of compatible strings for which the
      workaround is preserved, and don't apply the workaround for any drivers
      outside that list (this includes new drivers).
      
      In some cases, we make the assumption that even existing drivers don't
      rely on DSA's workaround, and we do this by looking at the device trees
      in which they appear. We can't fully know what is the situation with
      downstream DT blobs, but we can guess the overall trend by studying the
      DT blobs that were submitted upstream. If there are upstream blobs that
      have lacking descriptions, we take it as very likely that there are many
      more downstream blobs that do so too. If all upstream blobs have
      complete descriptions, we take that as a hint that the driver is a
      candidate for enforcing strict DT bindings (considering that most
      bindings are copy-pasted). If there are no upstream DT blobs, we take
      the conservative route of allowing the workaround, unless the driver
      maintainer instructs us otherwise.
      
      The driver situation is as follows:
      
      ar9331
      ~~~~~~
      
          compatible strings:
          - qca,ar9331-switch
      
          1 occurrence in mainline device trees, part of SoC dtsi
          (arch/mips/boot/dts/qca/ar9331.dtsi), description is not problematic.
      
          Verdict: opt into strict DT bindings and out of workarounds.
      
      b53
      ~~~
      
          compatible strings:
          - brcm,bcm5325
          - brcm,bcm53115
          - brcm,bcm53125
          - brcm,bcm53128
          - brcm,bcm5365
          - brcm,bcm5389
          - brcm,bcm5395
          - brcm,bcm5397
          - brcm,bcm5398
      
          - brcm,bcm53010-srab
          - brcm,bcm53011-srab
          - brcm,bcm53012-srab
          - brcm,bcm53018-srab
          - brcm,bcm53019-srab
          - brcm,bcm5301x-srab
          - brcm,bcm11360-srab
          - brcm,bcm58522-srab
          - brcm,bcm58525-srab
          - brcm,bcm58535-srab
          - brcm,bcm58622-srab
          - brcm,bcm58623-srab
          - brcm,bcm58625-srab
          - brcm,bcm88312-srab
          - brcm,cygnus-srab
          - brcm,nsp-srab
          - brcm,omega-srab
      
          - brcm,bcm3384-switch
          - brcm,bcm6328-switch
          - brcm,bcm6368-switch
          - brcm,bcm63xx-switch
      
          I've found at least these mainline DT blobs with problems:
      
          arch/arm/boot/dts/bcm47094-linksys-panamera.dts
          - lacks phy-mode
          arch/arm/boot/dts/bcm47189-tenda-ac9.dts
          - lacks phy-mode and fixed-link
          arch/arm/boot/dts/bcm47081-luxul-xap-1410.dts
          arch/arm/boot/dts/bcm47081-luxul-xwr-1200.dts
          arch/arm/boot/dts/bcm47081-buffalo-wzr-600dhp2.dts
          - lacks phy-mode and fixed-link
          arch/arm/boot/dts/bcm47094-luxul-xbr-4500.dts
          arch/arm/boot/dts/bcm4708-smartrg-sr400ac.dts
          arch/arm/boot/dts/bcm4708-luxul-xap-1510.dts
          arch/arm/boot/dts/bcm953012er.dts
          arch/arm/boot/dts/bcm4708-netgear-r6250.dts
          arch/arm/boot/dts/bcm4708-buffalo-wzr-1166dhp-common.dtsi
          arch/arm/boot/dts/bcm4708-luxul-xwc-1000.dts
          arch/arm/boot/dts/bcm47094-luxul-abr-4500.dts
          - lacks phy-mode and fixed-link
          arch/arm/boot/dts/bcm53016-meraki-mr32.dts
          - lacks phy-mode
      
          Verdict: opt into DSA workarounds.
      
      bcm_sf2
      ~~~~~~~
      
          compatible strings:
          - brcm,bcm4908-switch
          - brcm,bcm7445-switch-v4.0
          - brcm,bcm7278-switch-v4.0
          - brcm,bcm7278-switch-v4.8
      
          A single occurrence in mainline
          (arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi), part of a SoC
          dtsi, valid description. Florian Fainelli explains that most of the
          bcm_sf2 device trees lack a full description for the internal IMP
          ports.
      
          Verdict: opt the BCM4908 into strict DT bindings, and opt the rest
          into the workarounds. Note that even though BCM4908 has strict DT
          bindings, it still does not register with phylink on the IMP port
          due to it implementing ->adjust_link().
      
      hellcreek
      ~~~~~~~~~
      
          compatible strings:
          - hirschmann,hellcreek-de1soc-r1
      
          No occurrence in mainline device trees. Kurt Kanzenbach explains
          that the downstream device trees lacked phy-mode and fixed link, and
          needed work, but were fixed in the meantime.
      
          Verdict: opt into strict DT bindings and out of workarounds.
      
      lan9303
      ~~~~~~~
      
          compatible strings:
          - smsc,lan9303-mdio
          - smsc,lan9303-i2c
      
          1 occurrence in mainline device trees:
          arch/arm/boot/dts/imx53-kp-hsc.dts
          - no phy-mode, no fixed-link
      
          Verdict: opt out of strict DT bindings and into workarounds.
      
      lantiq_gswip
      ~~~~~~~~~~~~
      
          compatible strings:
          - lantiq,xrx200-gswip
          - lantiq,xrx300-gswip
          - lantiq,xrx330-gswip
      
          No occurrences in mainline device trees. Martin Blumenstingl
          confirms that the downstream OpenWrt device trees lack a proper
          fixed-link and need work, and that the incomplete description can
          even be seen in the example from
          Documentation/devicetree/bindings/net/dsa/lantiq-gswip.txt.
      
          Verdict: opt out of strict DT bindings and into workarounds.
      
      microchip ksz
      ~~~~~~~~~~~~~
      
          compatible strings:
          - microchip,ksz8765
          - microchip,ksz8794
          - microchip,ksz8795
          - microchip,ksz8863
          - microchip,ksz8873
          - microchip,ksz9477
          - microchip,ksz9897
          - microchip,ksz9893
          - microchip,ksz9563
          - microchip,ksz8563
          - microchip,ksz9567
          - microchip,lan9370
          - microchip,lan9371
          - microchip,lan9372
          - microchip,lan9373
          - microchip,lan9374
      
          5 occurrences in mainline device trees, all descriptions are valid.
          But we had a snafu for the ksz8795 and ksz9477 drivers where the
          phy-mode property would be expected to be located directly under the
          'switch' node rather than under a port OF node. It was fixed by
          commit edecfa98
      
       ("net: dsa: microchip: look for phy-mode in port
          nodes"). The driver still has compatibility with the old DT blobs.
          The lan937x support was added later than the above snafu was fixed,
          and even though it has support for the broken DT blobs by virtue of
          sharing a common probing function, I'll take it that its DT blobs
          are correct.
      
          Verdict: opt lan937x into strict DT bindings, and the others out.
      
      mt7530
      ~~~~~~
      
          compatible strings
          - mediatek,mt7621
          - mediatek,mt7530
          - mediatek,mt7531
      
          Multiple occurrences in mainline device trees, one is part of an SoC
          dtsi (arch/mips/boot/dts/ralink/mt7621.dtsi), all descriptions are fine.
      
          Verdict: opt into strict DT bindings and out of workarounds.
      
      mv88e6060
      ~~~~~~~~~
      
          compatible string:
          - marvell,mv88e6060
      
          no occurrences in mainline, nobody knows anybody who uses it.
      
          Verdict: opt out of strict DT bindings and into workarounds.
      
      mv88e6xxx
      ~~~~~~~~~
      
          compatible strings:
          - marvell,mv88e6085
          - marvell,mv88e6190
          - marvell,mv88e6250
      
          Device trees that have incomplete descriptions of CPU or DSA ports:
          arch/arm64/boot/dts/freescale/imx8mq-zii-ultra.dtsi
          - lacks phy-mode
          arch/arm64/boot/dts/marvell/cn9130-crb.dtsi
          - lacks phy-mode and fixed-link
          arch/arm/boot/dts/vf610-zii-ssmb-spu3.dts
          - lacks phy-mode
          arch/arm/boot/dts/kirkwood-mv88f6281gtw-ge.dts
          - lacks phy-mode
          arch/arm/boot/dts/vf610-zii-spb4.dts
          - lacks phy-mode
          arch/arm/boot/dts/vf610-zii-cfu1.dts
          - lacks phy-mode
          arch/arm/boot/dts/vf610-zii-dev-rev-c.dts
          - lacks phy-mode on CPU port, fixed-link on DSA ports
          arch/arm/boot/dts/vf610-zii-dev-rev-b.dts
          - lacks phy-mode on CPU port
          arch/arm/boot/dts/armada-381-netgear-gs110emx.dts
          - lacks phy-mode
          arch/arm/boot/dts/vf610-zii-scu4-aib.dts
          - lacks fixed-link on xgmii DSA ports and/or in-band-status on
            2500base-x DSA ports, and phy-mode on CPU port
          arch/arm/boot/dts/imx6qdl-gw5904.dtsi
          - lacks phy-mode and fixed-link
          arch/arm/boot/dts/armada-385-clearfog-gtr-l8.dts
          - lacks phy-mode and fixed-link
          arch/arm/boot/dts/vf610-zii-ssmb-dtu.dts
          - lacks phy-mode
          arch/arm/boot/dts/kirkwood-dir665.dts
          - lacks phy-mode
          arch/arm/boot/dts/kirkwood-rd88f6281.dtsi
          - lacks phy-mode
          arch/arm/boot/dts/orion5x-netgear-wnr854t.dts
          - lacks phy-mode and fixed-link
          arch/arm/boot/dts/armada-388-clearfog.dts
          - lacks phy-mode
          arch/arm/boot/dts/armada-xp-linksys-mamba.dts
          - lacks phy-mode
          arch/arm/boot/dts/armada-385-linksys.dtsi
          - lacks phy-mode
          arch/arm/boot/dts/imx6q-b450v3.dts
          arch/arm/boot/dts/imx6q-b850v3.dts
          - has a phy-handle but not a phy-mode?
          arch/arm/boot/dts/armada-370-rd.dts
          - lacks phy-mode
          arch/arm/boot/dts/kirkwood-linksys-viper.dts
          - lacks phy-mode
          arch/arm/boot/dts/imx51-zii-rdu1.dts
          - lacks phy-mode
          arch/arm/boot/dts/imx51-zii-scu2-mezz.dts
          - lacks phy-mode
          arch/arm/boot/dts/imx6qdl-zii-rdu2.dtsi
          - lacks phy-mode
          arch/arm/boot/dts/armada-385-clearfog-gtr-s4.dts
          - lacks phy-mode and fixed-link
      
          Verdict: opt out of strict DT bindings and into workarounds.
      
      ocelot
      ~~~~~~
      
          compatible strings:
          - mscc,vsc9953-switch
          - felix (arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi) is a PCI
            device, has no compatible string
      
          2 occurrences in mainline, both are part of SoC dtsi and complete.
      
          Verdict: opt into strict DT bindings and out of workarounds.
      
      qca8k
      ~~~~~
      
          compatible strings:
          - qca,qca8327
          - qca,qca8328
          - qca,qca8334
          - qca,qca8337
      
          5 occurrences in mainline device trees, none of the descriptions are
          problematic.
      
          Verdict: opt into strict DT bindings and out of workarounds.
      
      realtek
      ~~~~~~~
      
          compatible strings:
          - realtek,rtl8366rb
          - realtek,rtl8365mb
      
          2 occurrences in mainline, both descriptions are fine, additionally
          rtl8365mb.c has a comment "The device tree firmware should also
          specify the link partner of the extension port - either via a
          fixed-link or other phy-handle."
      
          Verdict: opt into strict DT bindings and out of workarounds.
      
      rzn1_a5psw
      ~~~~~~~~~~
      
          compatible strings:
          - renesas,rzn1-a5psw
      
          One single occurrence, part of SoC dtsi
          (arch/arm/boot/dts/r9a06g032.dtsi), description is fine.
      
          Verdict: opt into strict DT bindings and out of workarounds.
      
      sja1105
      ~~~~~~~
      
          Driver already validates its port OF nodes in
          sja1105_parse_ports_node().
      
          Verdict: opt into strict DT bindings and out of workarounds.
      
      vsc73xx
      ~~~~~~~
      
          compatible strings:
          - vitesse,vsc7385
          - vitesse,vsc7388
          - vitesse,vsc7395
          - vitesse,vsc7398
      
          2 occurrences in mainline device trees, both descriptions are fine.
      
          Verdict: opt into strict DT bindings and out of workarounds.
      
      xrs700x
      ~~~~~~~
      
          compatible strings:
          - arrow,xrs7003e
          - arrow,xrs7003f
          - arrow,xrs7004e
          - arrow,xrs7004f
      
          no occurrences in mainline, we don't know.
      
          Verdict: opt out of strict DT bindings and into workarounds.
      
      Because there is a pattern where newly added switches reuse existing
      drivers more often than introducing new ones, I've opted for deciding
      who gets to opt into the workaround based on an OF compatible match
      table in the DSA core. The alternative would have been to add another
      boolean property to struct dsa_switch, like configure_vlan_while_not_filtering.
      But this avoids situations where sometimes driver maintainers obfuscate
      what goes on by sharing a common probing function, and therefore making
      new switches inherit old quirks.
      
      Side note, we also warn about missing properties for drivers that rely
      on the workaround. This isn't an indication that we'll break
      compatibility with those DT blobs any time soon, but is rather done to
      raise awareness about the change, for future DT blob authors.
      
      Cc: Rob Herring <robh+dt@kernel.org>
      Cc: Frank Rowand <frowand.list@gmail.com>
      Acked-by: Alvin Šipraga <alsi@bang-olufsen.dk> # realtek
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      e09e9873
    • Vladimir Oltean's avatar
      net: dsa: rename dsa_port_link_{,un}register_of · 770375ff
      Vladimir Oltean authored
      
      
      There is a subset of functions that applies only to shared (DSA and CPU)
      ports, yet this is difficult to comprehend by looking at their code alone.
      These are dsa_port_link_register_of(), dsa_port_link_unregister_of(),
      and the functions that only these 2 call.
      
      Rename this class of functions to dsa_shared_port_* to make this fact
      more evident, even if this goes against the apparent convention that
      function names in port.c must start with dsa_port_.
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      770375ff