TI SoC driver updates for v6.2 v2
* Minor bugfixes for knav_qmss_queue, smartreflex drivers * API optimizations including using devm, bitmap apis to ti-sci, soc-info drivers * k3-ringacc can now be built as modules for certain distros that mandate such usage. * k3-socinfo can now detect AM62A SoCs. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE+KKGk1TrgjIXoxo03bWEnRc2JJ0FAmN9SRsACgkQ3bWEnRc2 JJ0YBQ/9F2cqRCAQNVMWBuvLL9YkkIQtmwWCKA5x2Ommjjb7uzIL4lXxihRTytaZ OpyFk5PcPRKyaHoQgUeHsa5B8aK95ItWFsDN/8yNyZkAcBvUujyRK2kZDMD0XqbV pfvpUFGCxbH3vCfQdYimw5k433unxLRmwR9N2byFFJmbCiGEr6LMjpLB/BAOUWjI N34L+ggJacVRfB3wrTLQ3FcTpN63lGWarDezcmrmuSkdefh2R/A7RPcnL7BOxgxu N1K5Ab9vbDSaUTbaUXHyM52WaFtxt3UWB+JMk9nuAJTXDllfOBuo6b5n1UjGNysx 5L2q+OkN8gH3Yk3HGf8OmTocHi/6ybWl6ablHGfFwvizdmXdLU+QV4gLhN3xeNE9 xMqZtkrA+1nEmyVr/07Xy85I4y8HGIeUXULsch3mz8KpnUnKbV3PWbhPP99I6qFX zDtmq6T3No0wfgWbFuEClLHYo7SFolFe70fKljAN4U8zrmSGMJ3tDye2ni7lt++M 1zAkpNyrz7uIoacL22GEogjxhfwq6fB6rO/um0eVScKIA39/WApFDhoQp64dWHKg ctzOwqF72QwHXr0BmuhQTsN9YCl/T+VnUnxeyiIhAadvS0KzF/t9TbfD1bPFFnab QGPRvazAHDFXgk3JL5WkiimJZdFNordp7Lo/gPGAnw3QR2nuJKw= =Vpxw -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmN+DPcACgkQmmx57+YA GNm6ThAArSVogJP6kwdLC4VdsJBEHHR/IreAlRlD81m9g1ZeDG75hHo9V91MPL3u YAPQNt6T4wCRrn9CUefnm18tGxlg2uw6tX5Mmpgm/UmQ4zMjWKswIZmYPn5kIdVa paIEyqTK+y+Kz3Ga8X0nzNvDiOgPtAOW/kHsTxZ/9L5DfX7Q6d4fneZ0+miVza1J 7Jg/Kc9uixSLyNipBSRWIx2hBn5Xisd+az/+25Fp6SaM8TMQF06U0XJmP50iR1IR hhpT5F4Ukz6X8Qgf6vvB6gKD9gmNEYy4gO+XaFpUmLM+E4VJ0tsVl3uZL8/sR4o+ IaUEi7pih6iR5Nd/jxnKup2ryxCqfL98zKe32xzkgbJzdNH8CzhhZcuxpbr1dIQj IpQcq8HAObhaw25lMEfyi92+0coCPe9L3fiPSCY/ktkrCBxBA3QQeS7tniUfbDFh E2AyLTeD3E6/gD3LN6hE9X+NNnDjHfiqCloq6Jscsx+oO3iOu5+QpNhbkbdkPBnO mBrtHNdUIBXxHNPwUjbJmL+O6A7UmxMvHZrbuhlfQcgXN2cOu4vEYc0eHgMGsAYq 3x9zPL9BcmhFRwIVds4WiPxTwJP27YcfvyuQPrIP6TRVQvZgQdKaJHbfDJZL4F3T d2VFQEV6PKDcAXpa8YjAmULrFhR1JID9aAznXwoak0ihXPUksdc= =UudG -----END PGP SIGNATURE----- Merge tag 'ti-driver-soc-for-v6.2-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/ti/linux into soc/drivers TI SoC driver updates for v6.2 v2 * Minor bugfixes for knav_qmss_queue, smartreflex drivers * API optimizations including using devm, bitmap apis to ti-sci, soc-info drivers * k3-ringacc can now be built as modules for certain distros that mandate such usage. * k3-socinfo can now detect AM62A SoCs. * tag 'ti-driver-soc-for-v6.2-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/ti/linux: soc: ti: k3-socinfo: Add AM62Ax JTAG ID soc: ti: smartreflex: Fix PM disable depth imbalance in omap_sr_probe soc: ti: knav_qmss_queue: Fix PM disable depth imbalance in knav_queue_probe firmware: ti_sci: Use devm_bitmap_zalloc when applicable soc: ti: k3-ringacc: Allow the driver to be built as module firmware: ti_sci: Fix polled mode during system suspend firmware: ti_sci: Use the non-atomic bitmap API when applicable firmware: ti_sci: Use the bitmap API to allocate bitmaps drivers: soc: ti: knav_qmss_queue: Mark knav_acc_firmwares as static Link: https://lore.kernel.org/r/20221122223856.fwackjg7fbd5jcz7@wannabe Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
a7a7c00cdc
@ -429,15 +429,14 @@ static inline int ti_sci_do_xfer(struct ti_sci_info *info,
|
||||
* during noirq phase, so we must manually poll the completion.
|
||||
*/
|
||||
ret = read_poll_timeout_atomic(try_wait_for_completion, done_state,
|
||||
true, 1,
|
||||
done_state, 1,
|
||||
info->desc->max_rx_timeout_ms * 1000,
|
||||
false, &xfer->done);
|
||||
}
|
||||
|
||||
if (ret == -ETIMEDOUT || !done_state) {
|
||||
if (ret == -ETIMEDOUT)
|
||||
dev_err(dev, "Mbox timedout in resp(caller: %pS)\n",
|
||||
(void *)_RET_IP_);
|
||||
}
|
||||
|
||||
/*
|
||||
* NOTE: we might prefer not to need the mailbox ticker to manage the
|
||||
@ -3096,7 +3095,7 @@ u16 ti_sci_get_free_resource(struct ti_sci_resource *res)
|
||||
|
||||
free_bit = find_first_zero_bit(desc->res_map, res_count);
|
||||
if (free_bit != res_count) {
|
||||
set_bit(free_bit, desc->res_map);
|
||||
__set_bit(free_bit, desc->res_map);
|
||||
raw_spin_unlock_irqrestore(&res->lock, flags);
|
||||
|
||||
if (desc->num && free_bit < desc->num)
|
||||
@ -3127,10 +3126,10 @@ void ti_sci_release_resource(struct ti_sci_resource *res, u16 id)
|
||||
|
||||
if (desc->num && desc->start <= id &&
|
||||
(desc->start + desc->num) > id)
|
||||
clear_bit(id - desc->start, desc->res_map);
|
||||
__clear_bit(id - desc->start, desc->res_map);
|
||||
else if (desc->num_sec && desc->start_sec <= id &&
|
||||
(desc->start_sec + desc->num_sec) > id)
|
||||
clear_bit(id - desc->start_sec, desc->res_map);
|
||||
__clear_bit(id - desc->start_sec, desc->res_map);
|
||||
}
|
||||
raw_spin_unlock_irqrestore(&res->lock, flags);
|
||||
}
|
||||
@ -3201,9 +3200,8 @@ devm_ti_sci_get_resource_sets(const struct ti_sci_handle *handle,
|
||||
|
||||
valid_set = true;
|
||||
res_count = res->desc[i].num + res->desc[i].num_sec;
|
||||
res->desc[i].res_map =
|
||||
devm_kzalloc(dev, BITS_TO_LONGS(res_count) *
|
||||
sizeof(*res->desc[i].res_map), GFP_KERNEL);
|
||||
res->desc[i].res_map = devm_bitmap_zalloc(dev, res_count,
|
||||
GFP_KERNEL);
|
||||
if (!res->desc[i].res_map)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
@ -3400,13 +3398,11 @@ static int ti_sci_probe(struct platform_device *pdev)
|
||||
if (!minfo->xfer_block)
|
||||
return -ENOMEM;
|
||||
|
||||
minfo->xfer_alloc_table = devm_kcalloc(dev,
|
||||
BITS_TO_LONGS(desc->max_msgs),
|
||||
sizeof(unsigned long),
|
||||
GFP_KERNEL);
|
||||
minfo->xfer_alloc_table = devm_bitmap_zalloc(dev,
|
||||
desc->max_msgs,
|
||||
GFP_KERNEL);
|
||||
if (!minfo->xfer_alloc_table)
|
||||
return -ENOMEM;
|
||||
bitmap_zero(minfo->xfer_alloc_table, desc->max_msgs);
|
||||
|
||||
/* Pre-initialize the buffer pointer to pre-allocated buffers */
|
||||
for (i = 0, xfer = minfo->xfer_block; i < desc->max_msgs; i++, xfer++) {
|
||||
|
@ -63,7 +63,7 @@ config TI_SCI_PM_DOMAINS
|
||||
rootfs may be available.
|
||||
|
||||
config TI_K3_RINGACC
|
||||
bool "K3 Ring accelerator Sub System"
|
||||
tristate "K3 Ring accelerator Sub System"
|
||||
depends on ARCH_K3 || COMPILE_TEST
|
||||
depends on TI_SCI_INTA_IRQCHIP
|
||||
help
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/platform_device.h>
|
||||
@ -336,6 +336,9 @@ struct k3_ring *k3_ringacc_request_ring(struct k3_ringacc *ringacc,
|
||||
|
||||
mutex_lock(&ringacc->req_lock);
|
||||
|
||||
if (!try_module_get(ringacc->dev->driver->owner))
|
||||
goto err_module_get;
|
||||
|
||||
if (id == K3_RINGACC_RING_ID_ANY) {
|
||||
/* Request for any general purpose ring */
|
||||
struct ti_sci_resource_desc *gp_rings =
|
||||
@ -380,6 +383,9 @@ out:
|
||||
return &ringacc->rings[id];
|
||||
|
||||
error:
|
||||
module_put(ringacc->dev->driver->owner);
|
||||
|
||||
err_module_get:
|
||||
mutex_unlock(&ringacc->req_lock);
|
||||
return NULL;
|
||||
}
|
||||
@ -616,6 +622,8 @@ int k3_ringacc_ring_free(struct k3_ring *ring)
|
||||
no_init:
|
||||
clear_bit(ring->ring_id, ringacc->rings_inuse);
|
||||
|
||||
module_put(ringacc->dev->driver->owner);
|
||||
|
||||
out:
|
||||
mutex_unlock(&ringacc->req_lock);
|
||||
return 0;
|
||||
@ -1450,6 +1458,7 @@ static const struct of_device_id k3_ringacc_of_match[] = {
|
||||
{ .compatible = "ti,am654-navss-ringacc", .data = &k3_ringacc_data, },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, k3_ringacc_of_match);
|
||||
|
||||
struct k3_ringacc *k3_ringacc_dmarings_init(struct platform_device *pdev,
|
||||
struct k3_ringacc_init_data *data)
|
||||
@ -1544,12 +1553,27 @@ static int k3_ringacc_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int k3_ringacc_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct k3_ringacc *ringacc = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
mutex_lock(&k3_ringacc_list_lock);
|
||||
list_del(&ringacc->list);
|
||||
mutex_unlock(&k3_ringacc_list_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver k3_ringacc_driver = {
|
||||
.probe = k3_ringacc_probe,
|
||||
.remove = k3_ringacc_remove,
|
||||
.driver = {
|
||||
.name = "k3-ringacc",
|
||||
.of_match_table = k3_ringacc_of_match,
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
};
|
||||
builtin_platform_driver(k3_ringacc_driver);
|
||||
module_platform_driver(k3_ringacc_driver);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DESCRIPTION("TI Ringacc driver for K3 SOCs");
|
||||
MODULE_AUTHOR("Grygorii Strashko <grygorii.strashko@ti.com>");
|
||||
|
@ -43,6 +43,7 @@ static const struct k3_soc_id {
|
||||
{ 0xBB38, "AM64X" },
|
||||
{ 0xBB75, "J721S2"},
|
||||
{ 0xBB7E, "AM62X" },
|
||||
{ 0xBB8D, "AM62AX" },
|
||||
};
|
||||
|
||||
static int
|
||||
|
@ -67,7 +67,7 @@ static DEFINE_MUTEX(knav_dev_lock);
|
||||
* Newest followed by older ones. Search is done from start of the array
|
||||
* until a firmware file is found.
|
||||
*/
|
||||
const char *knav_acc_firmwares[] = {"ks2_qmss_pdsp_acc48.bin"};
|
||||
static const char * const knav_acc_firmwares[] = {"ks2_qmss_pdsp_acc48.bin"};
|
||||
|
||||
static bool device_ready;
|
||||
bool knav_qmss_device_ready(void)
|
||||
@ -1785,6 +1785,7 @@ static int knav_queue_probe(struct platform_device *pdev)
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
ret = pm_runtime_resume_and_get(&pdev->dev);
|
||||
if (ret < 0) {
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
dev_err(dev, "Failed to enable QMSS\n");
|
||||
return ret;
|
||||
}
|
||||
|
@ -932,6 +932,7 @@ static int omap_sr_probe(struct platform_device *pdev)
|
||||
err_debugfs:
|
||||
debugfs_remove_recursive(sr_info->dbg_dir);
|
||||
err_list_del:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
list_del(&sr_info->node);
|
||||
clk_unprepare(sr_info->fck);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user