06 Jan, 2021

1 commit


18 Oct, 2020

1 commit


07 Oct, 2020

1 commit


14 Sep, 2020

1 commit

  • This patch fix following issue.
    Controller slots blocked for devices with static_addr
    but no init_dyn_addr may limit the number of I3C devices
    on the bus which gets dynamic address in DAA. So
    instead of attaching all the devices with static_addr,
    now we only attach the devices which successfully
    complete SETDASA. For remaining devices with init_dyn_addr,
    i3c_master_add_i3c_dev_locked() will try to set requested
    dynamic address after DAA.

    Signed-off-by: Parshuram Thombare
    Signed-off-by: Boris Brezillon
    Link: https://lore.kernel.org/linux-i3c/1598337109-14770-1-git-send-email-pthombar@cadence.com

    Parshuram Thombare
     

24 Aug, 2020

1 commit

  • Replace the existing /* fall through */ comments and its variants with
    the new pseudo-keyword macro fallthrough[1]. Also, remove unnecessary
    fall-through markings when it is the case.

    [1] https://www.kernel.org/doc/html/v5.7/process/deprecated.html?highlight=fallthrough#implicit-switch-case-fall-through

    Signed-off-by: Gustavo A. R. Silva

    Gustavo A. R. Silva
     

19 Aug, 2020

1 commit

  • Boardinfo was lost if I3C object for devices with boardinfo
    available are not created or not added to the I3C device list
    because of some failure e.g. SETDASA failed, retrieve info failed etc
    This patch adds i3c_master_attach_boardinfo which scan boardinfo list
    in the master object and 'attach' it to the I3C device object.

    Fixes: 3a379bbcea0a ("i3c: Add core I3C infrastructure")
    Signed-off-by: Parshuram Thombare
    Signed-off-by: Boris Brezillon
    Link: https://lore.kernel.org/linux-i3c/1590053542-389-1-git-send-email-pthombar@cadence.com

    Parshuram Thombare
     

16 Apr, 2020

1 commit

  • According to the I3C spec v1.1 document, GETMRL's payload is 2 bytes,
    with an optional 3rd byte if the IBI private payload is larger than
    1 byte. The whole GETMRL may also be optional so max_ibi_len already
    defaults to 1 if BCR_IBI_PAYLOAD prior to the i3c_master_getmrl_locked()
    call.

    Signed-off-by: Nicolas Pitre
    Signed-off-by: Boris Brezillon
    Link: https://lore.kernel.org/linux-i3c/nycvar.YSQ.7.76.2004151623060.2671@knanqh.ubzr

    Nicolas Pitre
     

29 Mar, 2020

1 commit


28 Feb, 2020

3 commits

  • The current codebase makes use of the zero-length array language
    extension to the C90 standard, but the preferred mechanism to declare
    variable-length types such as these ones is a flexible array member[1][2],
    introduced in C99:

    struct foo {
    int stuff;
    struct boo array[];
    };

    By making use of the mechanism above, we will get a compiler warning
    in case the flexible array does not occur last in the structure, which
    will help us prevent some kind of undefined behavior bugs from being
    inadvertently introduced[3] to the codebase from now on.

    Also, notice that, dynamic memory allocations won't be affected by
    this change:

    "Flexible array members have incomplete type, and so the sizeof operator
    may not be applied. As a quirk of the original implementation of
    zero-length arrays, sizeof evaluates to zero."[1]

    This issue was found with the help of Coccinelle.

    [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
    [2] https://github.com/KSPP/linux/issues/21
    [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour")

    Signed-off-by: Gustavo A. R. Silva
    Signed-off-by: Boris Brezillon
    Link: https://lore.kernel.org/linux-i3c/20200227131307.GA24935@embeddedor

    Gustavo A. R. Silva
     
  • Simply match against ->match_flags instead of trying to be smart and
    fix drivers inconsistent ID tables.

    Signed-off-by: Boris Brezillon
    Signed-off-by: Vitor Soares
    Link: https://lore.kernel.org/linux-i3c/8c5d6523e1c161783db834a3447954f7fd6267e6.1582796652.git.vitor.soares@synopsys.com

    Boris Brezillon
     
  • Create a modalias sysfs attribute for i3c devices.

    Signed-off-by: Boris Brezillon
    Signed-off-by: Vitor Soares
    Link: https://lore.kernel.org/linux-i3c/a90f64f830128cd12762153de7828b775574c156.1582796652.git.vitor.soares@synopsys.com

    Boris Brezillon
     

27 Feb, 2020

1 commit

  • file2alias uses %X formatters. Fix typos in the MODALIAS uevent to print
    the part and ext IDs in uppercase.

    Signed-off-by: Boris Brezillon
    Signed-off-by: Vitor Soares
    Link: https://lore.kernel.org/linux-i3c/9ac5f1f8413fbb0481de76b5e43f2f4e1b2dc49f.1582796652.git.vitor.soares@synopsys.com

    Boris Brezillon
     

18 Feb, 2020

1 commit


13 Jan, 2020

3 commits


09 Dec, 2019

2 commits


31 Oct, 2019

1 commit


01 Oct, 2019

1 commit


27 Aug, 2019

1 commit


12 Aug, 2019

1 commit

  • In i3c_master_getmwl_locked(), the buffer used for the dest payload data is
    allocated using kzalloc() in i3c_ccc_cmd_dest_init(). Later on, the length
    of the dest payload data is checked against 'sizeof(*mwl)'. If they are not
    equal, -EIO is returned to indicate the error. However, the allocated
    buffer is not deallocated on this path, leading to a memory leak.

    To fix the above issue, free the buffer before returning the error.

    Signed-off-by: Wenwen Wang
    Signed-off-by: Boris Brezillon

    Wenwen Wang
     

11 Aug, 2019

3 commits

  • I need to store address and lvr value for I2C devices without static definition
    in DT. This allows secondary master to transmit DEFSLVS command properly.

    Main changes between v4 and v5:
    - Change in defslvs to use addr and lvr from i2c_dev_desc structure
    - Change in CDNS and DW drivers to use addr and lvr from i2c_dev_desc structure

    Signed-off-by: Przemyslaw Gaj
    Signed-off-by: Boris Brezillon

    Przemyslaw Gaj
     
  • This simplifies and standardizes slot manipulation code
    by using for_each_set_bit() library function.

    Signed-off-by: Andy Shevchenko
    Signed-off-by: Boris Brezillon

    Andy Shevchenko
     
  • Each iteration of for_each_available_childe_of_node puts the previous
    node, but in the case of a return from the middle of the loop, there
    is no put, thus causing a memory leak. Add an of_node_put before the
    return.
    Issue found with Coccinelle.

    Signed-off-by: Nishka Dasgupta
    Signed-off-by: Boris Brezillon

    Nishka Dasgupta
     

27 Jul, 2019

1 commit


10 Jul, 2019

1 commit

  • Pull ic3 updates from Boris Brezillon:

    - Drop support for 10-bit I2C addresses

    - Add support for limited bus mode

    - Fix the Cadence DT binding doc

    - Use struct_size() to allocate a DEFSLVS packet

    * tag 'i3c/for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/i3c/linux:
    i3c: master: Use struct_size() helper
    dt-bindings: i3c: cdns: Use correct cells for I2C device
    i3c: dw: add limited bus mode support
    i3c: add mixed limited bus mode
    i3c: fix i2c and i3c scl rate by bus mode
    dt-bindings: i3c: Document dropped support for I2C 10 bit devices
    i3c: Drop support for I2C 10 bit addresing

    Linus Torvalds
     

04 Jul, 2019

1 commit

  • Make use of the struct_size() helper instead of an open-coded version
    in order to avoid any potential type mistakes, in particular in the
    context in which this code is being used.

    So, replace the following form:

    sizeof(*defslvs) + ((ndevs - 1) * sizeof(struct i3c_ccc_dev_desc))

    with:

    struct_size(defslvs, slaves, ndevs - 1)

    This code was detected with the help of Coccinelle.

    Signed-off-by: Gustavo A. R. Silva
    Signed-off-by: Boris Brezillon

    Gustavo A. R. Silva
     

20 Jun, 2019

3 commits

  • This patch add limited bus mode support for DesignWare i3c master

    Signed-off-by: Vitor Soares
    Cc: Boris Brezillon
    Cc:
    Signed-off-by: Boris Brezillon

    Vitor Soares
     
  • The i3c bus spec defines a bus configuration where i2c devices don't
    have a 50ns filter but support SCL running at SDR max rate (12.5MHz).

    This patch introduces the limited bus mode so that users can use
    a higher speed in presence of i2c devices index 1.

    Signed-off-by: Vitor Soares
    Cc: Boris Brezillon
    Cc:
    Signed-off-by: Boris Brezillon

    Vitor Soares
     
  • Currently the I3C framework limits SCL frequency to FM speed when
    dealing with a mixed slow bus, even if all I2C devices are FM+ capable.

    The core was also not accounting for I3C speed limitations when
    operating in mixed slow mode and was erroneously using FM+ speed as the
    max I2C speed when operating in mixed fast mode.

    Fixes: 3a379bbcea0a ("i3c: Add core I3C infrastructure")
    Signed-off-by: Vitor Soares
    Cc: Boris Brezillon
    Cc:
    Cc:
    Signed-off-by: Boris Brezillon

    Vitor Soares
     

28 May, 2019

1 commit

  • This patch drops support for I2C devices with 10 bit addressing. When I2C
    device with 10 bit address is defined in DT, I3C master registration fails.

    Address space for I2C devices has been reduced and ->i2c_funcs() hook has been
    removed.

    Because this patch series dropped support for 10 bit I2C devices, support is
    also dropped in Cadence I3C master driver and Synopsys DesignWare I3C master
    driver.

    Signed-off-by: Przemyslaw Gaj
    Signed-off-by: Boris Brezillon

    Przemyslaw Gaj
     

21 May, 2019

1 commit


07 May, 2019

1 commit


06 May, 2019

1 commit

  • The problem here is that addr can be I3C_BROADCAST_ADDR (126). That
    means we're shifting by (126 * 2) % 64 which is 60. The
    I3C_ADDR_SLOT_STATUS_MASK is an enum which is an unsigned int in GCC
    so shifts greater than 31 are undefined.

    Fixes: 3a379bbcea0a ("i3c: Add core I3C infrastructure")
    Cc:
    Signed-off-by: Dan Carpenter
    Signed-off-by: Boris Brezillon

    Dan Carpenter
     

10 Apr, 2019

2 commits

  • The controller was being disabled incorrectly. The correct way is to clear
    the DEV_CTRL_ENABLE bit.

    Fix this by clearing this bit.

    Cc: Boris Brezillon
    Cc:
    Fixes: 1dd728f5d4d4 ("i3c: master: Add driver for Synopsys DesignWare IP")
    Signed-off-by: Vitor Soares
    Signed-off-by: Boris Brezillon

    Vitor Soares
     
  • The validation of random PID should be done by checking the
    boardinfo->pid instead of info.pid which is empty.

    Doing the change the info struture declaration is no longer necessary.

    Cc: Boris Brezillon
    Cc:
    Fixes: 3a379bbcea0a ("i3c: Add core I3C infrastructure")
    Signed-off-by: Vitor Soares
    Signed-off-by: Boris Brezillon

    Vitor Soares
     

30 Mar, 2019

1 commit

  • Detected by CoverityScan (Event result_independent_of_operands):
    "(i3c_xfers + i).len > 65536" is always false regardless of the values
    of its operands. This occurs as the logical operand of "if"

    "(i2c_xfers + i).len > 65536" is always false regardless of the values
    of its operands. This occurs as the logical operand of "if"

    Signed-off-by: Vitor Soares
    Signed-off-by: Boris Brezillon

    Vitor Soares
     

05 Mar, 2019

1 commit


28 Feb, 2019

1 commit

  • In preparation to enabling -Wimplicit-fallthrough, mark switch
    cases where we are expecting to fall through.

    This patch fixes the following warning:

    drivers/i3c/master/dw-i3c-master.c: In function ‘dw_i3c_master_bus_init’:
    drivers/i3c/master/dw-i3c-master.c:603:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
    if (ret)
    ^
    drivers/i3c/master/dw-i3c-master.c:605:2: note: here
    case I3C_BUS_MODE_PURE:
    ^~~~

    Warning level 3 was used: -Wimplicit-fallthrough=3

    This patch is part of the ongoing efforts to enable
    -Wimplicit-fallthrough.

    Signed-off-by: Gustavo A. R. Silva
    Acked-by: Vitor Soares
    Signed-off-by: Boris Brezillon

    Gustavo A. R. Silva