TI SoC driver updates for v6.20

Bug Fixes:
 - pruss: Fix double free in pruss_clk_mux_setup()
 - k3-socinfo: Fix regmap leak on probe failure
 - k3-socinfo: Fix compile testing dependency issue
 
 Cleanups:
 - knav_dma/knav_qmss: Remove redundant ENOMEM printks and simplify error messages
 - knav_dma/knav: Simplify code with scoped for each OF child loops
 - ti_sci.h: Fix all kernel-doc warnings
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEE+KKGk1TrgjIXoxo03bWEnRc2JJ0FAmlvjBYACgkQ3bWEnRc2
 JJ3wHA/+LpLB7VtlJbeMSjjsLPCnXD5Xo+IzqcY0Rc6YA42rW4Cl5HVexG/L0Xbk
 jktWDBWvVqEY2n/RyGZCvZhBcu6YUhoDDawGM1MoQF1qdlNp6hDmCLbeNpebLvqZ
 DRUpKX2/rZEoIOCIWqXQtaW8Rh2EKkgNQtTs79l3AUv4w0TAf9C8cw0mwunfGvjr
 TsBW90qXaxE5k5cYeqLrR/08LNfRJr2bJ3OPTb0Tufl6q9vZG32rMTsITqTiCAVf
 LBb609H0hcO5l1MmvvElb9MWSMTqseKddGakPwOJF7w2dDLAU7D09ppNdGSMzpjw
 gYY+wXMpLSlInSIslBl9X/HswXSBCnu+nB9YxUMiY9WJbHZaBFU7lPg316CnuIMm
 JMZ7FHvPO+qoau0Lh5WlNDkO54SfUX87T130hRfXhG4FkgzO81PiLJ3uZAisMMSW
 YEezJm9LQ4XtGIUGWsQg0Ek3uQQhCSXizaFrOME4iSpRCwo7LL4ayySggKB1NWWi
 92clznBLOiTIpPAGCzw9Z1me3b5yvKijnCsVg/F08L4mHn+CwCWx7Rsjc3EmD+NT
 vTmbqF5myy8vbhEVtUp/ZLdN4q5zIBI76LZCUeva7pQXuR90rE4LtoP1PmdmTgYl
 QcpqdcET3YQ9Q20eZKXuN5aL4r1ZpY5mkyxmS6lqLm0KdBTCw+Y=
 =cWRk
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmlw9DUACgkQmmx57+YA
 GNm+Vw//b3NXmAFSPmn646f9eQgw22O/vHZSSJijTy2GEhX4gCCSKohpR78BabZx
 MBfwsvypatxpnTQeHoOHsSmfJJ1fFvuY0X86wN5Qc4VESfXLhVFLtqy9+5t48OgJ
 56e3zvOYJFOivNPLowQ39nn5hpeg5UJnwsQkIm5vyMhH8U7pf4zsUWxq9KaGmrGE
 EJ8fj71qsdXmOoS/05UkzX423rLkzdBZYG9rsjYQBxXnvgNmsVNiz3HxiCoGlWnQ
 U3yagQJiaGtNyg7kwEdY3tvAi9nxKVWsrSadOqRoFLTPsvVmh/itKD/2ISL4+kkp
 ZjoXfRR3UgKC98iUUQOdIWhNHi+QOUmyFRF+foWB3TAwQAPneJIXP5+dLGyUQMVH
 Pfd/9eSPrE7T4pEYKlTE/1Ku2ws5ruZQLU3cgbQ5WiZMkmfCOTwIe2lUkbIrssO5
 6fneJjOKYuq48efL+CLxLqtuU/KJITrxQDMMlNs6b2YkPhYp6nYwX8vZ3zf+LnCY
 opCk/DRAyX2eB0Prwz3oaSYqH0oVnWSJXvIdyY/4sS1h5jsyEOylGt2CunYGxvRd
 umXy1m9WYNdhSA6oeWxANBgKuJg/TIIdokpUZTQ5fh0tyQqzVd+SpBeAWrDrRiy5
 bzXnMsnjovB9rAGCwLBdG1SzwFcNOjlYlCX4eZqS47CMVdXDiy4=
 =EbIi
 -----END PGP SIGNATURE-----

Merge tag 'ti-driver-soc-for-v6.20' of https://git.kernel.org/pub/scm/linux/kernel/git/ti/linux into soc/drivers

TI SoC driver updates for v6.20

Bug Fixes:
- pruss: Fix double free in pruss_clk_mux_setup()
- k3-socinfo: Fix regmap leak on probe failure
- k3-socinfo: Fix compile testing dependency issue

Cleanups:
- knav_dma/knav_qmss: Remove redundant ENOMEM printks and simplify error messages
- knav_dma/knav: Simplify code with scoped for each OF child loops
- ti_sci.h: Fix all kernel-doc warnings

* tag 'ti-driver-soc-for-v6.20' of https://git.kernel.org/pub/scm/linux/kernel/git/ti/linux:
  soc: ti: pruss: Fix double free in pruss_clk_mux_setup()
  soc: ti: k3-socinfo: Fix regmap leak on probe failure
  soc: ti: k3-socinfo: Fix compile testing
  soc: ti: knav_dma: Simplify with scoped for each OF child loop
  soc: ti: knav: Simplify with scoped for each OF child loop
  soc: ti: knav_dma: Simplify error messages in probe
  soc: ti: knav_dma: Remove ENOMEM printks
  soc: ti: knav_qmss: Remove ENOMEM printks
  firmware: ti_sci.h: fix all kernel-doc warnings

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
Arnd Bergmann 2026-01-21 16:43:45 +01:00
commit 599efa093f
6 changed files with 34 additions and 51 deletions

View file

@ -580,13 +580,13 @@ struct ti_sci_msg_resp_get_clock_freq {
} __packed;
/**
* struct tisci_msg_req_prepare_sleep - Request for TISCI_MSG_PREPARE_SLEEP.
* struct ti_sci_msg_req_prepare_sleep - Request for TISCI_MSG_PREPARE_SLEEP.
*
* @hdr TISCI header to provide ACK/NAK flags to the host.
* @mode Low power mode to enter.
* @ctx_lo Low 32-bits of physical pointer to address to use for context save.
* @ctx_hi High 32-bits of physical pointer to address to use for context save.
* @debug_flags Flags that can be set to halt the sequence during suspend or
* @hdr: TISCI header to provide ACK/NAK flags to the host.
* @mode: Low power mode to enter.
* @ctx_lo: Low 32-bits of physical pointer to address to use for context save.
* @ctx_hi: High 32-bits of physical pointer to address to use for context save.
* @debug_flags: Flags that can be set to halt the sequence during suspend or
* resume to allow JTAG connection and debug.
*
* This message is used as the first step of entering a low power mode. It
@ -610,7 +610,7 @@ struct ti_sci_msg_req_prepare_sleep {
} __packed;
/**
* struct tisci_msg_set_io_isolation_req - Request for TI_SCI_MSG_SET_IO_ISOLATION.
* struct ti_sci_msg_req_set_io_isolation - Request for TI_SCI_MSG_SET_IO_ISOLATION.
*
* @hdr: Generic header
* @state: The deseared state of the IO isolation.
@ -676,7 +676,7 @@ struct ti_sci_msg_req_lpm_set_device_constraint {
* TISCI_MSG_LPM_SET_LATENCY_CONSTRAINT.
*
* @hdr: TISCI header to provide ACK/NAK flags to the host.
* @wkup_latency: The maximum acceptable latency to wake up from low power mode
* @latency: The maximum acceptable latency to wake up from low power mode
* in milliseconds. The deeper the state, the higher the latency.
* @state: The desired state of wakeup latency constraint: set or clear.
* @rsvd: Reserved for future use.
@ -855,7 +855,7 @@ struct ti_sci_msg_rm_ring_cfg_req {
* UDMAP transmit channels mapped to source threads will have their
* TCHAN_THRD_ID register programmed with the destination thread if the pairing
* is successful.
*
* @dst_thread: PSI-L destination thread ID within the PSI-L System thread map.
* PSI-L destination threads start at index 0x8000. The request is NACK'd if
* the destination thread is not greater than or equal to 0x8000.
@ -1000,7 +1000,8 @@ struct rm_ti_sci_msg_udmap_rx_flow_opt_cfg {
} __packed;
/**
* Configures a Navigator Subsystem UDMAP transmit channel
* struct ti_sci_msg_rm_udmap_tx_ch_cfg_req - Configures a
* Navigator Subsystem UDMAP transmit channel
*
* Configures the non-real-time registers of a Navigator Subsystem UDMAP
* transmit channel. The channel index must be assigned to the host defined
@ -1128,7 +1129,8 @@ struct ti_sci_msg_rm_udmap_tx_ch_cfg_req {
} __packed;
/**
* Configures a Navigator Subsystem UDMAP receive channel
* struct ti_sci_msg_rm_udmap_rx_ch_cfg_req - Configures a
* Navigator Subsystem UDMAP receive channel
*
* Configures the non-real-time registers of a Navigator Subsystem UDMAP
* receive channel. The channel index must be assigned to the host defined
@ -1247,7 +1249,8 @@ struct ti_sci_msg_rm_udmap_rx_ch_cfg_req {
} __packed;
/**
* Configures a Navigator Subsystem UDMAP receive flow
* struct ti_sci_msg_rm_udmap_flow_cfg_req - Configures a
* Navigator Subsystem UDMAP receive flow
*
* Configures a Navigator Subsystem UDMAP receive flow's registers.
* Configuration does not include the flow registers which handle size-based
@ -1258,7 +1261,7 @@ struct ti_sci_msg_rm_udmap_rx_ch_cfg_req {
*
* @hdr: Standard TISCI header
*
* @valid_params
* @valid_params:
* Bitfield defining validity of rx flow configuration parameters. The
* rx flow configuration fields are not valid, and will not be used for flow
* configuration, if their corresponding valid bit is zero. Valid bit usage:

View file

@ -62,7 +62,7 @@ config TI_K3_RINGACC
If unsure, say N.
config TI_K3_SOCINFO
bool
bool "K3 SoC Information driver" if COMPILE_TEST
depends on ARCH_K3 || COMPILE_TEST
select SOC_BUS
select MFD_SYSCON

View file

@ -141,7 +141,7 @@ static int k3_chipinfo_probe(struct platform_device *pdev)
if (IS_ERR(base))
return PTR_ERR(base);
regmap = regmap_init_mmio(dev, base, &k3_chipinfo_regmap_cfg);
regmap = devm_regmap_init_mmio(dev, base, &k3_chipinfo_regmap_cfg);
if (IS_ERR(regmap))
return PTR_ERR(regmap);

View file

@ -706,20 +706,15 @@ static int knav_dma_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct device_node *node = pdev->dev.of_node;
struct device_node *child;
int ret = 0;
if (!node) {
dev_err(&pdev->dev, "could not find device info\n");
return -EINVAL;
}
if (!node)
return dev_err_probe(dev, -EINVAL, "could not find device info\n");
kdev = devm_kzalloc(dev,
sizeof(struct knav_dma_pool_device), GFP_KERNEL);
if (!kdev) {
dev_err(dev, "could not allocate driver mem\n");
if (!kdev)
return -ENOMEM;
}
kdev->dev = dev;
INIT_LIST_HEAD(&kdev->list);
@ -727,23 +722,21 @@ static int knav_dma_probe(struct platform_device *pdev)
pm_runtime_enable(kdev->dev);
ret = pm_runtime_resume_and_get(kdev->dev);
if (ret < 0) {
dev_err(kdev->dev, "unable to enable pktdma, err %d\n", ret);
dev_err(dev, "unable to enable pktdma, err %d\n", ret);
goto err_pm_disable;
}
/* Initialise all packet dmas */
for_each_child_of_node(node, child) {
for_each_child_of_node_scoped(node, child) {
ret = dma_init(node, child);
if (ret) {
of_node_put(child);
dev_err(&pdev->dev, "init failed with %d\n", ret);
dev_err(dev, "init failed with %d\n", ret);
break;
}
}
if (list_empty(&kdev->list)) {
dev_err(dev, "no valid dma instance\n");
ret = -ENODEV;
ret = dev_err_probe(dev, -ENODEV, "no valid dma instance\n");
goto err_put_sync;
}

View file

@ -1079,7 +1079,6 @@ static int knav_queue_setup_regions(struct knav_device *kdev,
struct device_node *regions __free(device_node) =
of_get_child_by_name(node, "descriptor-regions");
struct knav_region *region;
struct device_node *child;
u32 temp[2];
int ret;
@ -1087,13 +1086,10 @@ static int knav_queue_setup_regions(struct knav_device *kdev,
return dev_err_probe(dev, -ENODEV,
"descriptor-regions not specified\n");
for_each_child_of_node(regions, child) {
for_each_child_of_node_scoped(regions, child) {
region = devm_kzalloc(dev, sizeof(*region), GFP_KERNEL);
if (!region) {
of_node_put(child);
dev_err(dev, "out of memory allocating region\n");
if (!region)
return -ENOMEM;
}
region->name = knav_queue_find_name(child);
of_property_read_u32(child, "id", &region->id);
@ -1397,7 +1393,6 @@ static int knav_queue_init_qmgrs(struct knav_device *kdev,
struct device_node *qmgrs __free(device_node) =
of_get_child_by_name(node, "qmgrs");
struct knav_qmgr_info *qmgr;
struct device_node *child;
u32 temp[2];
int ret;
@ -1405,13 +1400,10 @@ static int knav_queue_init_qmgrs(struct knav_device *kdev,
return dev_err_probe(dev, -ENODEV,
"queue manager info not specified\n");
for_each_child_of_node(qmgrs, child) {
for_each_child_of_node_scoped(qmgrs, child) {
qmgr = devm_kzalloc(dev, sizeof(*qmgr), GFP_KERNEL);
if (!qmgr) {
of_node_put(child);
dev_err(dev, "out of memory allocating qmgr\n");
if (!qmgr)
return -ENOMEM;
}
ret = of_property_read_u32_array(child, "managed-queues",
temp, 2);
@ -1503,15 +1495,12 @@ static int knav_queue_init_pdsps(struct knav_device *kdev,
{
struct device *dev = kdev->dev;
struct knav_pdsp_info *pdsp;
struct device_node *child;
for_each_child_of_node(pdsps, child) {
for_each_child_of_node_scoped(pdsps, child) {
pdsp = devm_kzalloc(dev, sizeof(*pdsp), GFP_KERNEL);
if (!pdsp) {
of_node_put(child);
dev_err(dev, "out of memory allocating pdsp\n");
if (!pdsp)
return -ENOMEM;
}
pdsp->name = knav_queue_find_name(child);
pdsp->iram =
knav_queue_map_reg(kdev, child,

View file

@ -366,12 +366,10 @@ static int pruss_clk_mux_setup(struct pruss *pruss, struct clk *clk_mux,
ret = devm_add_action_or_reset(dev, pruss_of_free_clk_provider,
clk_mux_np);
if (ret) {
if (ret)
dev_err(dev, "failed to add clkmux free action %d", ret);
goto put_clk_mux_np;
}
return 0;
return ret;
put_clk_mux_np:
of_node_put(clk_mux_np);