1. 07 Nov, 2022 21 commits
  2. 05 Nov, 2022 9 commits
  3. 04 Nov, 2022 10 commits
    • David S. Miller's avatar
      Merge branch 'net-ipa-more-endpoints' · 95ec6bce
      David S. Miller authored
      Alex Elder says:
      
      ====================
      net: ipa: support more endpoints
      
      This series adds support for more than 32 IPA endpoints.  To do
      this, five registers whose bits represent endpoint state are
      replicated as needed to represent endpoints beyond 32.  For existing
      platforms, the number of endpoints is never greater than 32, so
      there is just one of each register.  IPA v5.0+ supports more than
      that though; these changes prepare the code for that.
      
      Beyond that, the IPA fields that represent endpoints in a 32-bit
      bitmask are updated to support an arbitrary number of these endpoint
      registers.  (There is one exception, explained in patch 7.)
      
      The first two patches are some sort of unrelated cleanups, making
      use of a helper function introduced recently.
      
      The third and fourth use parameterized functions to determine the
      register offset for registers that represent endpoints.
      
      The last five convert fields representing endpoints to allow more
      than 32 endpoints to be represented.
      
      Since v1, I have implemented Jakub's suggestions:
        - Don't print a message on (bitmap) memory allocation failure
        - Do not do "mass null checks" when allocating bitmaps
        - Rework some code to ensure error path is sane
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      95ec6bce
    • Alex Elder's avatar
      net: ipa: use a bitmap for enabled endpoints · 9b7a0065
      Alex Elder authored
      Replace the 32-bit unsigned used to track enabled endpoints with a
      Linux bitmap, to allow an arbitrary number of endpoints to be
      represented.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9b7a0065
    • Alex Elder's avatar
      net: ipa: use a bitmap for set-up endpoints · ae5108e9
      Alex Elder authored
      Replace the 32-bit unsigned used to track endpoints that have
      completed setup with a Linux bitmap, to allow an arbitrary number
      of endpoints to be represented.
      
      Rework the error handling in ipa_endpoint_init() so the defined
      endpoint bitmap is freed if an error occurs early.  Once endpoints
      have been initialized, ipa_endpoint_exit() is used to recover if
      the set of filtered endpoints is invalid.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ae5108e9
    • Alex Elder's avatar
      net: ipa: support more filtering endpoints · 0f97fbd4
      Alex Elder authored
      Prior to IPA v5.0, there could be no more than 32 endpoints.
      
      A filter table begins with a bitmap indicating which endpoints have
      a filter defined.  That bitmap is currently assumed to fit in a
      32-bit value.
      
      Starting with IPA v5.0, more than 32 endpoints are supported, so
      it's conceivable that a TX endpoint has an ID that exceeds 32.
      Increase the size of the field representing endpoints that support
      filtering to 64 bits.  Rename the bitmap field "filtered".
      
      Unlike other similar fields, we do not use an (arbitrarily long)
      Linux bitmap for this purpose.  The reason is that if a filter table
      ever *did* need to support more than 64 TX endpoints, its format
      would change in ways we can't anticipate.
      
      Have ipa_endpoint_init() return a negative errno rather than a mask
      that indicates which endpoints support filtering, and have that
      function assign the "filtered" field directly.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0f97fbd4
    • Alex Elder's avatar
      net: ipa: use a bitmap for available endpoints · 88de7672
      Alex Elder authored
      Similar to the previous patch, replace the 32-bit unsigned used to
      track endpoints supported by hardware with a Linux bitmap, to allow
      an arbitrary number of endpoints to be represented.
      
      Move ipa_endpoint_deconfig() above ipa_endpoint_config() and use
      it in the error path of the latter function.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      88de7672
    • Alex Elder's avatar
      net: ipa: use a bitmap for defined endpoints · 9a9f5129
      Alex Elder authored
      IPA v5.0 supports more than 32 endpoints, so we will be unable to
      represent endpoints defined in the configuration data with a 32-bit
      value.  To prepare for that, convert the field in the IPA structure
      representing defined endpoints to be a Linux bitmap.
      
      Convert loops based on that field into for_each_set_bit() calls over
      the new bitmap.  Note that the loop in ipa_endpoint_config() still
      assumes there are 32 or fewer endpoints (when comparing against the
      available endpoint bit mask); that assumption goes away in the next
      patch.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9a9f5129
    • Alex Elder's avatar
      net: ipa: add a parameter to suspend registers · f298ba78
      Alex Elder authored
      The SUSPEND_INFO, SUSPEND_EN, SUSPEND_CLR registers represent
      endpoint IDs in a bit mask.  When more than 32 endpoints are
      supported, these registers will be replicated as needed to represent
      the number of supported endpoints.  Update the definitions of these
      registers to have a stride of 4 bytes, and update the code that
      operates them to select the proper offset and bit.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f298ba78
    • Alex Elder's avatar
      net: ipa: add a parameter to aggregation registers · 1d8f16db
      Alex Elder authored
      Starting with IPA v5.0, a single IPA instance can have more than 32
      endpoints defined.  To handle this, each register that holds a
      bitmap of IPA endpoints is replicated as needed to represent the
      available endpoints.
      
      To prepare for this, registers that represent endpoint IDs in a bit
      mask will be defined to have a parameter, with a stride value of 4
      bytes.  The first 32 endpoints are represented in the first 32-bit
      register, then the next (up to) 32 endpoints at an offset 4 bytes
      higher.  When accessing such a register, the endpoint ID divided
      by 32 determines the offset, and the endpoint ID modulo 32 defines
      the endpoint's bit position within the register.
      
      The first two registers we'll update for this are STATE_AGGR_ACTIVE
      and AGGR_FORCE_CLOSE.
      
      Until more than 32 endpoints are supported, this change has no
      practical effect.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1d8f16db
    • Alex Elder's avatar
      net: ipa: use ipa_table_mem() in ipa_table_reset_add() · 6337b147
      Alex Elder authored
      Similar to the previous commit, pass flags rather than a memory
      region ID to ipa_table_reset_add(), and there use ipa_table_mem() to
      look up the memory region affected based on those flags.
      
      Currently all eight of these table memory regions are assumed to
      exist, because they all have canaries within them.  Stop assuming
      that will always be the case, and in ipa_table_reset_add() allow
      these memory regions to be non-existent.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      6337b147
    • Alex Elder's avatar
      net: ipa: reduce arguments to ipa_table_init_add() · 5cb76899
      Alex Elder authored
      Recently ipa_table_mem() was added as a way to look up one of 8
      possible memory regions by indicating whether it was a filter or
      route table, hashed or not, and IPv6 or not.
      
      We can simplify the interface to ipa_table_init_add() by passing two
      flags to it instead of the opcode and both hashed and non-hashed
      memory region IDs.  The "filter" and "ipv6" flags are sufficient to
      determine the opcode to use, and with ipa_table_mem() can look up
      the correct memory region as well.
      
      It's possible to not have hashed tables, but we already verify the
      number of entries in a filter or routing table is nonzero.  Stop
      assuming a hashed table entry exists in ipa_table_init_add().
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      5cb76899