#
62fe9d06 |
| 08-Jul-2024 |
Aniket <aniketmaurya@google.com> |
i3c: dw: Add power management support
Add support for runtime and system power management. Handle clocks, resets, pads as part of suspend and resume. Restore controller registers that could be lost
i3c: dw: Add power management support
Add support for runtime and system power management. Handle clocks, resets, pads as part of suspend and resume. Restore controller registers that could be lost due to suspend. Finally add get and put calls appropriately in functions which access controller : bus_init, do_daa, send_ccc_cmd, priv_xfers, i2c_xfers, ibi and hot-join.
Signed-off-by: Aniket <aniketmaurya@google.com> Link: https://lore.kernel.org/r/20240708062103.3296587-4-aniketmaurya@google.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
effd2174 |
| 08-Jul-2024 |
Aniket <aniketmaurya@google.com> |
i3c: dw: Add some functions for reusability
Separate logic for setting intr/thld registers in a func. Also modify enable function to take care of setting all fields in DEVICE_CTRL. These functions c
i3c: dw: Add some functions for reusability
Separate logic for setting intr/thld registers in a func. Also modify enable function to take care of setting all fields in DEVICE_CTRL. These functions can be reused later for power management.
Signed-off-by: Aniket <aniketmaurya@google.com> Link: https://lore.kernel.org/r/20240708062103.3296587-3-aniketmaurya@google.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
4e89bc48 |
| 08-Jul-2024 |
Aniket <aniketmaurya@google.com> |
i3c: dw: Save timing registers and other values
Add variables to store timing registers and other values. These variables would be later used to restore registers during resume without recomputation
i3c: dw: Save timing registers and other values
Add variables to store timing registers and other values. These variables would be later used to restore registers during resume without recomputation.
Signed-off-by: Aniket <aniketmaurya@google.com> Link: https://lore.kernel.org/r/20240708062103.3296587-2-aniketmaurya@google.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
a0d48ebf |
| 28-Jun-2024 |
Aniket <aniketmaurya@google.com> |
i3c: dw: Add optional apb clock
Besides the core clock, IP also has an apb interface clock. Add an optional hook for the same.
Signed-off-by: Aniket <aniketmaurya@google.com> Link: https://lore.ker
i3c: dw: Add optional apb clock
Besides the core clock, IP also has an apb interface clock. Add an optional hook for the same.
Signed-off-by: Aniket <aniketmaurya@google.com> Link: https://lore.kernel.org/r/20240628154618.327151-1-aniketmaurya@google.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
54f5079e |
| 28-Jun-2024 |
Aniket <aniketmaurya@google.com> |
i3c: dw: Use new *_enabled clk API
Move to "enabled" variant of clk_get API. It takes care of enable and disable calls during the probe and remove.
Signed-off-by: Aniket <aniketmaurya@google.com> L
i3c: dw: Use new *_enabled clk API
Move to "enabled" variant of clk_get API. It takes care of enable and disable calls during the probe and remove.
Signed-off-by: Aniket <aniketmaurya@google.com> Link: https://lore.kernel.org/r/20240628154603.326075-1-aniketmaurya@google.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
d9deb28f |
| 27-Jun-2024 |
Aniket <aniketmaurya@google.com> |
i3c: dw: Remove ibi_capable property
Since DW I3C IP master role always supports IBI, we don't need to keep two variants of master ops and select one using this property. Hence remove the code.
Sig
i3c: dw: Remove ibi_capable property
Since DW I3C IP master role always supports IBI, we don't need to keep two variants of master ops and select one using this property. Hence remove the code.
Signed-off-by: Aniket <aniketmaurya@google.com> Link: https://lore.kernel.org/r/20240627034119.3938050-1-aniketmaurya@google.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
64bf1459 |
| 07-Jun-2024 |
Aniket <aniketmaurya@google.com> |
i3c: dw: Fix IBI intr programming
IBI_SIR_REQ_REJECT register is not present if the IP has IC_HAS_IBI_DATA = 1 set. So don't rely on doing read- modify-write op on this register. Instead maintain a
i3c: dw: Fix IBI intr programming
IBI_SIR_REQ_REJECT register is not present if the IP has IC_HAS_IBI_DATA = 1 set. So don't rely on doing read- modify-write op on this register. Instead maintain a variable to store the sir reject mask and use it to set IBI_SIR_REQ_REJECT.
Signed-off-by: Aniket <aniketmaurya@google.com> Reviewed-by: Jeremy Kerr <jk@codeconstruct.com.au> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
8f2cb032 |
| 11-Jun-2024 |
Aniket <aniketmaurya@google.com> |
i3c: dw: Fix clearing queue thld
QUEUE_THLD_CTRL_IBI_STAT_MASK is repeated twice. Replace with QUEUE_THLD_CTRL_IBI_DATA_MASK.
Signed-off-by: Aniket <aniketmaurya@google.com> Signed-off-by: Alexandr
i3c: dw: Fix clearing queue thld
QUEUE_THLD_CTRL_IBI_STAT_MASK is repeated twice. Replace with QUEUE_THLD_CTRL_IBI_DATA_MASK.
Signed-off-by: Aniket <aniketmaurya@google.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
1d083260 |
| 29-Apr-2024 |
Billy Tsai <billy_tsai@aspeedtech.com> |
i3c: dw: Add hot-join support.
Add hot-join support for dw i3c master controller. By default, the hot-join acknowledgment is disabled, and the hardware will automatically send the DISEC CCC when it
i3c: dw: Add hot-join support.
Add hot-join support for dw i3c master controller. By default, the hot-join acknowledgment is disabled, and the hardware will automatically send the DISEC CCC when it receives the hot-join request. Users can use the sys entry to enable it.
Signed-off-by: Billy Tsai <billy_tsai@aspeedtech.com> Link: https://lore.kernel.org/r/20240429073624.256830-1-billy_tsai@aspeedtech.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
10201396 |
| 19-Jan-2024 |
Dylan Hung <dylan_hung@aspeedtech.com> |
i3c: dw: Disable IBI IRQ depends on hot-join and SIR enabling
Disable IBI IRQ signal and status only when hot-join and SIR enabling of all target devices attached to the bus are disabled.
Fixes: e3
i3c: dw: Disable IBI IRQ depends on hot-join and SIR enabling
Disable IBI IRQ signal and status only when hot-join and SIR enabling of all target devices attached to the bus are disabled.
Fixes: e389b1d72a62 ("i3c: dw: Add support for in-band interrupts")
Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com> Link: https://lore.kernel.org/r/20240119054547.983693-1-dylan_hung@aspeedtech.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
014c9a0e |
| 22-Sep-2023 |
Kees Cook <keescook@chromium.org> |
i3c: dw: Annotate struct dw_i3c_xfer with __counted_by
Prepare for the coming implementation by GCC and Clang of the __counted_by attribute. Flexible array members annotated with __counted_by can ha
i3c: dw: Annotate struct dw_i3c_xfer with __counted_by
Prepare for the coming implementation by GCC and Clang of the __counted_by attribute. Flexible array members annotated with __counted_by can have their accesses bounds-checked at run-time checking via CONFIG_UBSAN_BOUNDS (for array indexing) and CONFIG_FORTIFY_SOURCE (for strcpy/memcpy-family functions).
As found with Coccinelle[1], add __counted_by for struct dw_i3c_xfer.
[1] https://github.com/kees/kernel-tools/blob/trunk/coccinelle/examples/counted_by.cocci
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com> Cc: Jeremy Kerr <jk@codeconstruct.com.au> Cc: Joel Stanley <joel@jms.id.au> Cc: linux-i3c@lists.infradead.org Signed-off-by: Kees Cook <keescook@chromium.org> Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org> Reviewed-by: Jeremy Kerr <jk@codeconstruct.com.au> Link: https://lore.kernel.org/r/20230922175011.work.800-kees@kernel.org Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
f3a3553a |
| 30-Mar-2023 |
Jeremy Kerr <jk@codeconstruct.com.au> |
i3c: dw: Add a platform facility for IBI PEC workarounds
On the AST2600 i3c controller, we'll need to apply a workaround for a hardware issue with IBI payloads.
Introduce a platform hook to allow d
i3c: dw: Add a platform facility for IBI PEC workarounds
On the AST2600 i3c controller, we'll need to apply a workaround for a hardware issue with IBI payloads.
Introduce a platform hook to allow dw i3c platform implementations to modify the DAT entry in IBI enable/disable to allow this workaround in a future change.
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au> Reviewed-by: Joel Stanley <joel@jms.id.au> Link: https://lore.kernel.org/r/d5d76a8d2336d2a71886537f42e71d51db184df6.1680161823.git.jk@codeconstruct.com.au Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
e389b1d7 |
| 30-Mar-2023 |
Jeremy Kerr <jk@codeconstruct.com.au> |
i3c: dw: Add support for in-band interrupts
This change adds support for receiving and dequeueing i3c IBIs.
By setting struct dw_i3c_master->ibi_capable before probe, a platform implementation can
i3c: dw: Add support for in-band interrupts
This change adds support for receiving and dequeueing i3c IBIs.
By setting struct dw_i3c_master->ibi_capable before probe, a platform implementation can select the IBI-enabled version of the i3c_master_ops, enabling the global IBI infrastrcture for that controller.
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au> Reviewed-by: Joel Stanley <joel@jms.id.au> Link: https://lore.kernel.org/r/79daeefd7ccb7c935d0c159149df21a6c9a73ffa.1680161823.git.jk@codeconstruct.com.au Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
e2d43101 |
| 30-Mar-2023 |
Jeremy Kerr <jk@codeconstruct.com.au> |
i3c: dw: Turn DAT array entry into a struct
In an upcoming change, we will want to store additional data about the devices we have in the data address table.
Change the type of the DAT entries into
i3c: dw: Turn DAT array entry into a struct
In an upcoming change, we will want to store additional data about the devices we have in the data address table.
Change the type of the DAT entries into a struct, which currently just has the address data.
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au> Reviewed-by: Joel Stanley <joel@jms.id.au> Link: https://lore.kernel.org/r/9dc0d9e2857e851a0cf04819df48e5d31921f83e.1680161823.git.jk@codeconstruct.com.au Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
79f42b31 |
| 30-Mar-2023 |
Jeremy Kerr <jk@codeconstruct.com.au> |
i3c: dw: Create a generic fifo read function
In a future change we'll want to read from the IBI FIFO too, so turn dw_i3c_read_rx_fifo() into a generic read with the FIFO register as a parameter.
Si
i3c: dw: Create a generic fifo read function
In a future change we'll want to read from the IBI FIFO too, so turn dw_i3c_read_rx_fifo() into a generic read with the FIFO register as a parameter.
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au> Reviewed-by: Joel Stanley <joel@jms.id.au> Link: https://lore.kernel.org/r/827204789583dd86addffb47ecaeab9d67cf95d5.1680161823.git.jk@codeconstruct.com.au Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
d782188c |
| 31-Mar-2023 |
Jeremy Kerr <jk@codeconstruct.com.au> |
i3c: dw: Add infrastructure for platform-specific implementations
The dw i3c core can be integrated into various SoC devices. Platforms that use this core may need a little configuration that is spe
i3c: dw: Add infrastructure for platform-specific implementations
The dw i3c core can be integrated into various SoC devices. Platforms that use this core may need a little configuration that is specific to that platform.
Add some infrastructure to allow platform-specific behaviour: common probe/remove functions, a set of platform hook operations, and a pointer for platform-specific data in struct dw_i3c_master. Move the common api into a new (i3c local) header file.
Platforms will provide their own struct platform_driver, which allocates struct dw_i3c_master, does any platform-specific probe behaviour, and calls into the common probe.
A future change will add new platform support that uses this infrastructure.
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au> Reviewed-by: Joel Stanley <joel@jms.id.au> Link: https://lore.kernel.org/r/20230331091501.3800299-2-jk@codeconstruct.com.au Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
66b32e3d |
| 30-Mar-2023 |
Jeremy Kerr <jk@codeconstruct.com.au> |
i3c: dw: use bus mode rather than device reg for conditional tCAS setting
In the clock setup path, we set the hardware DEV_CTRL_I2C_SLAVE_PRESENT bit on a shared mode bus, then read-back this bit fo
i3c: dw: use bus mode rather than device reg for conditional tCAS setting
In the clock setup path, we set the hardware DEV_CTRL_I2C_SLAVE_PRESENT bit on a shared mode bus, then read-back this bit for the conditional tCAS set.
Instead, just use the bus->mode setting for the conditional test.
While we're at it, add a little comment about why the conditional is there.
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au> Link: https://lore.kernel.org/r/92a933566f7846708a00ad7f5a16ee8e6ed32d0e.1680156630.git.jk@codeconstruct.com.au Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
67df5ce9 |
| 30-Mar-2023 |
Matt Johnston <matt@codeconstruct.com.au> |
i3c: dw: Return the length from a read priv_xfer
We currently assume that the rx_len of a read command will be as submitted, but we may have a shorter read than expected.
This change populates the
i3c: dw: Return the length from a read priv_xfer
We currently assume that the rx_len of a read command will be as submitted, but we may have a shorter read than expected.
This change populates the output i3c xfer length from the actually-read length.
Signed-off-by: Matt Johnston <matt@codeconstruct.com.au> Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au> Link: https://lore.kernel.org/r/f4fff7ab18dee1f662dc7a5a4111fcd921e6792b.1680156630.git.jk@codeconstruct.com.au Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
04b5f1be |
| 18-Mar-2023 |
Uwe Kleine-König <u.kleine-koenig@pengutronix.de> |
i3c: dw: Convert to platform remove callback returning void
The .remove() callback for a platform driver returns an int which makes many driver authors wrongly assume it's possible to do error handl
i3c: dw: Convert to platform remove callback returning void
The .remove() callback for a platform driver returns an int which makes many driver authors wrongly assume it's possible to do error handling by returning an error code. However the value returned is (mostly) ignored and this typically results in resource leaks. To improve here there is a quest to make the remove callback return void. In the first step of this quest all drivers are converted to .remove_new() which already returns void.
Trivially convert this driver from always returning zero in the remove callback to the void returning variant.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Link: https://lore.kernel.org/r/20230318233311.265186-3-u.kleine-koenig@pengutronix.de Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
0f74f8b6 |
| 18-Mar-2023 |
Uwe Kleine-König <u.kleine-koenig@pengutronix.de> |
i3c: Make i3c_master_unregister() return void
The function returned zero unconditionally. Switch the return type to void and simplify the callers accordingly.
Signed-off-by: Uwe Kleine-König <u.kle
i3c: Make i3c_master_unregister() return void
The function returned zero unconditionally. Switch the return type to void and simplify the callers accordingly.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com> Link: https://lore.kernel.org/r/20230318233311.265186-2-u.kleine-koenig@pengutronix.de Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
1dae3f1d |
| 12-Mar-2023 |
Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> |
i3c: dw: drop of_match_ptr for ID table
The driver can match only via the DT table so the table should be always used and the of_match_ptr does not have any sense (this also allows ACPI matching via
i3c: dw: drop of_match_ptr for ID table
The driver can match only via the DT table so the table should be always used and the of_match_ptr does not have any sense (this also allows ACPI matching via PRP0001, even though it might not be relevant here). This also fixes !CONFIG_OF error:
drivers/i3c/master/dw-i3c-master.c:1201:34: error: ‘dw_i3c_master_of_match’ defined but not used [-Werror=unused-const-variable=]
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Link: https://lore.kernel.org/r/20230312132535.352246-1-krzysztof.kozlowski@linaro.org Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
510d2358 |
| 16-Feb-2023 |
Jack Chen <zenghuchen@google.com> |
i3c: master: dw: stop hardcoding initial speed
Bus-speed could be default(12.5MHz) or defined by users in dts. Dw-i3c-master should not hard-code the initial speed to be I3C_BUS_TYP_I3C_SCL_RATE (12
i3c: master: dw: stop hardcoding initial speed
Bus-speed could be default(12.5MHz) or defined by users in dts. Dw-i3c-master should not hard-code the initial speed to be I3C_BUS_TYP_I3C_SCL_RATE (12.5MHz) And because of Synopsys's I3C controller limit (hcnt/lcnt register length) and core-clk provided, there is a limit to bus speed, too. For example, when core-clk is 250 MHz, the bus speed cannot be lowered below 1MHz.
Tested: tested with an i3c sensor and captured with a logic analyzer.
Signed-off-by: Jack Chen <zenghuchen@google.com> Link: https://lore.kernel.org/r/20230216151057.293764-1-zenghuchen@google.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
show more ...
|
#
13462ba1 |
| 08-Jan-2022 |
Tom Rix <trix@redhat.com> |
i3c: master: dw: check return of dw_i3c_master_get_free_pos()
Clang static analysis reports this problem dw-i3c-master.c:799:9: warning: The result of the left shift is undefined because the left
i3c: master: dw: check return of dw_i3c_master_get_free_pos()
Clang static analysis reports this problem dw-i3c-master.c:799:9: warning: The result of the left shift is undefined because the left operand is negative COMMAND_PORT_DEV_INDEX(pos) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
pos can be negative because dw_i3c_master_get_free_pos() can return an error. So check for an error.
Fixes: 1dd728f5d4d4 ("i3c: master: Add driver for Synopsys DesignWare IP") Signed-off-by: Tom Rix <trix@redhat.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Link: https://lore.kernel.org/r/20220108150948.3988790-1-trix@redhat.com
show more ...
|
#
5c34b8e7 |
| 28-Dec-2020 |
Miquel Raynal <miquel.raynal@bootlin.com> |
i3c: master: dw: Drop redundant disec call
Disabling all event calls is already handled by the core right before starting the DAA process. Do not do it again when the DAA process completes, it is re
i3c: master: dw: Drop redundant disec call
Disabling all event calls is already handled by the core right before starting the DAA process. Do not do it again when the DAA process completes, it is redundant.
Fixes: 1dd728f5d4d4 ("i3c: master: Add driver for Synopsys DesignWare IP") Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Link: https://lore.kernel.org/r/20201228105501.6104-1-miquel.raynal@bootlin.com
show more ...
|
#
df561f66 |
| 23-Aug-2020 |
Gustavo A. R. Silva <gustavoars@kernel.org> |
treewide: Use fallthrough pseudo-keyword
Replace the existing /* fall through */ comments and its variants with the new pseudo-keyword macro fallthrough[1]. Also, remove unnecessary fall-through mar
treewide: Use fallthrough pseudo-keyword
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 <gustavoars@kernel.org>
show more ...
|