Commit 93e0acae authored by Arnd Bergmann's avatar Arnd Bergmann

Merge tag 'ti-driver-soc-for-v6.6' of...

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

TI SoC driver updates for v6.6

- Generic fixups: Explicitly include correct DT include.
- omap_prm: Cosmetic fixups for using devm_ api for ioremap_resource
- ti_sci: Documentation fixups, Using system_state to determine if
  polling is needed.
- k3-ringcc: Documentation fixups, cleanup of log messages, using
  devm_ to handle ioremap_resource.
- k3-socinfo: Add AM62PX detection.

* tag 'ti-driver-soc-for-v6.6' of https://git.kernel.org/pub/scm/linux/kernel/git/ti/linux:
  soc: ti: k3-socinfo.c: Add JTAG ID for AM62PX
  soc: ti: Use devm_platform_ioremap_resource_byname simplify logic
  soc: ti: k3-ringacc: remove non-fatal probe deferral log
  soc: ti: Explicitly include correct DT includes
  soc: ti: omap-prm: Use devm_platform_get_and_ioremap_resource()
  soc: ti: k3-ringacc: Fixup documentation errors
  firmware: ti_sci: Fixup documentation errors
  firmware: ti_sci: Use system_state to determine polling

Link: https://lore.kernel.org/r/20230814160633.my3xbk5k2pxkvjyi@degreaseSigned-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents f15897c2 443012dd
...@@ -97,7 +97,6 @@ struct ti_sci_desc { ...@@ -97,7 +97,6 @@ struct ti_sci_desc {
* @node: list head * @node: list head
* @host_id: Host ID * @host_id: Host ID
* @users: Number of users of this instance * @users: Number of users of this instance
* @is_suspending: Flag set to indicate in suspend path.
*/ */
struct ti_sci_info { struct ti_sci_info {
struct device *dev; struct device *dev;
...@@ -116,7 +115,6 @@ struct ti_sci_info { ...@@ -116,7 +115,6 @@ struct ti_sci_info {
u8 host_id; u8 host_id;
/* protected by ti_sci_list_mutex */ /* protected by ti_sci_list_mutex */
int users; int users;
bool is_suspending;
}; };
#define cl_to_ti_sci_info(c) container_of(c, struct ti_sci_info, cl) #define cl_to_ti_sci_info(c) container_of(c, struct ti_sci_info, cl)
...@@ -418,14 +416,14 @@ static inline int ti_sci_do_xfer(struct ti_sci_info *info, ...@@ -418,14 +416,14 @@ static inline int ti_sci_do_xfer(struct ti_sci_info *info,
ret = 0; ret = 0;
if (!info->is_suspending) { if (system_state <= SYSTEM_RUNNING) {
/* And we wait for the response. */ /* And we wait for the response. */
timeout = msecs_to_jiffies(info->desc->max_rx_timeout_ms); timeout = msecs_to_jiffies(info->desc->max_rx_timeout_ms);
if (!wait_for_completion_timeout(&xfer->done, timeout)) if (!wait_for_completion_timeout(&xfer->done, timeout))
ret = -ETIMEDOUT; ret = -ETIMEDOUT;
} else { } else {
/* /*
* If we are suspending, we cannot use wait_for_completion_timeout * If we are !running, we cannot use wait_for_completion_timeout
* during noirq phase, so we must manually poll the completion. * during noirq phase, so we must manually poll the completion.
*/ */
ret = read_poll_timeout_atomic(try_wait_for_completion, done_state, ret = read_poll_timeout_atomic(try_wait_for_completion, done_state,
...@@ -1978,8 +1976,6 @@ static int ti_sci_free_irq(const struct ti_sci_handle *handle, u32 valid_params, ...@@ -1978,8 +1976,6 @@ static int ti_sci_free_irq(const struct ti_sci_handle *handle, u32 valid_params,
* @src_index: IRQ source index within the source device * @src_index: IRQ source index within the source device
* @dst_id: Device ID of the IRQ destination * @dst_id: Device ID of the IRQ destination
* @dst_host_irq: IRQ number of the destination device * @dst_host_irq: IRQ number of the destination device
* @vint_irq: Boolean specifying if this interrupt belongs to
* Interrupt Aggregator.
* *
* Return: 0 if all went fine, else return appropriate error. * Return: 0 if all went fine, else return appropriate error.
*/ */
...@@ -2026,8 +2022,6 @@ static int ti_sci_cmd_set_event_map(const struct ti_sci_handle *handle, ...@@ -2026,8 +2022,6 @@ static int ti_sci_cmd_set_event_map(const struct ti_sci_handle *handle,
* @src_index: IRQ source index within the source device * @src_index: IRQ source index within the source device
* @dst_id: Device ID of the IRQ destination * @dst_id: Device ID of the IRQ destination
* @dst_host_irq: IRQ number of the destination device * @dst_host_irq: IRQ number of the destination device
* @vint_irq: Boolean specifying if this interrupt belongs to
* Interrupt Aggregator.
* *
* Return: 0 if all went fine, else return appropriate error. * Return: 0 if all went fine, else return appropriate error.
*/ */
...@@ -2620,6 +2614,7 @@ static int ti_sci_cmd_proc_handover(const struct ti_sci_handle *handle, ...@@ -2620,6 +2614,7 @@ static int ti_sci_cmd_proc_handover(const struct ti_sci_handle *handle,
* configuration flags * configuration flags
* @handle: Pointer to TI SCI handle * @handle: Pointer to TI SCI handle
* @proc_id: Processor ID this request is for * @proc_id: Processor ID this request is for
* @bootvector: Processor Boot vector (start address)
* @config_flags_set: Configuration flags to be set * @config_flags_set: Configuration flags to be set
* @config_flags_clear: Configuration flags to be cleared. * @config_flags_clear: Configuration flags to be cleared.
* *
...@@ -2736,9 +2731,13 @@ static int ti_sci_cmd_proc_set_control(const struct ti_sci_handle *handle, ...@@ -2736,9 +2731,13 @@ static int ti_sci_cmd_proc_set_control(const struct ti_sci_handle *handle,
} }
/** /**
* ti_sci_cmd_get_boot_status() - Command to get the processor boot status * ti_sci_cmd_proc_get_status() - Command to get the processor boot status
* @handle: Pointer to TI SCI handle * @handle: Pointer to TI SCI handle
* @proc_id: Processor ID this request is for * @proc_id: Processor ID this request is for
* @bv: Processor Boot vector (start address)
* @cfg_flags: Processor specific configuration flags
* @ctrl_flags: Processor specific control flags
* @sts_flags: Processor specific status flags
* *
* Return: 0 if all went well, else returns appropriate error value. * Return: 0 if all went well, else returns appropriate error value.
*/ */
...@@ -3256,7 +3255,7 @@ EXPORT_SYMBOL_GPL(devm_ti_sci_get_of_resource); ...@@ -3256,7 +3255,7 @@ EXPORT_SYMBOL_GPL(devm_ti_sci_get_of_resource);
* @handle: TISCI handle * @handle: TISCI handle
* @dev: Device pointer to which the resource is assigned * @dev: Device pointer to which the resource is assigned
* @dev_id: TISCI device id to which the resource is assigned * @dev_id: TISCI device id to which the resource is assigned
* @suub_type: TISCI resource subytpe representing the resource. * @sub_type: TISCI resource subytpe representing the resource.
* *
* Return: Pointer to ti_sci_resource if all went well else appropriate * Return: Pointer to ti_sci_resource if all went well else appropriate
* error pointer. * error pointer.
...@@ -3281,35 +3280,6 @@ static int tisci_reboot_handler(struct notifier_block *nb, unsigned long mode, ...@@ -3281,35 +3280,6 @@ static int tisci_reboot_handler(struct notifier_block *nb, unsigned long mode,
return NOTIFY_BAD; return NOTIFY_BAD;
} }
static void ti_sci_set_is_suspending(struct ti_sci_info *info, bool is_suspending)
{
info->is_suspending = is_suspending;
}
static int ti_sci_suspend(struct device *dev)
{
struct ti_sci_info *info = dev_get_drvdata(dev);
/*
* We must switch operation to polled mode now as drivers and the genpd
* layer may make late TI SCI calls to change clock and device states
* from the noirq phase of suspend.
*/
ti_sci_set_is_suspending(info, true);
return 0;
}
static int ti_sci_resume(struct device *dev)
{
struct ti_sci_info *info = dev_get_drvdata(dev);
ti_sci_set_is_suspending(info, false);
return 0;
}
static DEFINE_SIMPLE_DEV_PM_OPS(ti_sci_pm_ops, ti_sci_suspend, ti_sci_resume);
/* Description for K2G */ /* Description for K2G */
static const struct ti_sci_desc ti_sci_pmmc_k2g_desc = { static const struct ti_sci_desc ti_sci_pmmc_k2g_desc = {
.default_host_id = 2, .default_host_id = 2,
...@@ -3516,7 +3486,6 @@ static struct platform_driver ti_sci_driver = { ...@@ -3516,7 +3486,6 @@ static struct platform_driver ti_sci_driver = {
.driver = { .driver = {
.name = "ti-sci", .name = "ti-sci",
.of_match_table = of_match_ptr(ti_sci_of_match), .of_match_table = of_match_ptr(ti_sci_of_match),
.pm = &ti_sci_pm_ops,
}, },
}; };
module_platform_driver(ti_sci_driver); module_platform_driver(ti_sci_driver);
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include <linux/iopoll.h> #include <linux/iopoll.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_device.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/pm_clock.h> #include <linux/pm_clock.h>
#include <linux/pm_domain.h> #include <linux/pm_domain.h>
...@@ -943,10 +942,6 @@ static int omap_prm_probe(struct platform_device *pdev) ...@@ -943,10 +942,6 @@ static int omap_prm_probe(struct platform_device *pdev)
struct omap_prm *prm; struct omap_prm *prm;
int ret; int ret;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res)
return -ENODEV;
data = of_device_get_match_data(&pdev->dev); data = of_device_get_match_data(&pdev->dev);
if (!data) if (!data)
return -ENOTSUPP; return -ENOTSUPP;
...@@ -955,6 +950,10 @@ static int omap_prm_probe(struct platform_device *pdev) ...@@ -955,6 +950,10 @@ static int omap_prm_probe(struct platform_device *pdev)
if (!prm) if (!prm)
return -ENOMEM; return -ENOMEM;
prm->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
if (IS_ERR(prm->base))
return PTR_ERR(prm->base);
while (data->base != res->start) { while (data->base != res->start) {
if (!data->base) if (!data->base)
return -EINVAL; return -EINVAL;
...@@ -963,10 +962,6 @@ static int omap_prm_probe(struct platform_device *pdev) ...@@ -963,10 +962,6 @@ static int omap_prm_probe(struct platform_device *pdev)
prm->data = data; prm->data = data;
prm->base = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(prm->base))
return PTR_ERR(prm->base);
ret = omap_prm_domain_init(&pdev->dev, prm); ret = omap_prm_domain_init(&pdev->dev, prm);
if (ret) if (ret)
return ret; return ret;
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_device.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/sys_soc.h> #include <linux/sys_soc.h>
#include <linux/dma/ti-cppi5.h> #include <linux/dma/ti-cppi5.h>
...@@ -125,6 +124,7 @@ struct k3_ring_ops { ...@@ -125,6 +124,7 @@ struct k3_ring_ops {
* @occ: Occupancy * @occ: Occupancy
* @windex: Write index * @windex: Write index
* @rindex: Read index * @rindex: Read index
* @tdown_complete: Tear down complete state
*/ */
struct k3_ring_state { struct k3_ring_state {
u32 free; u32 free;
...@@ -192,7 +192,7 @@ struct k3_ringacc_ops { ...@@ -192,7 +192,7 @@ struct k3_ringacc_ops {
* @num_rings: number of ring in RA * @num_rings: number of ring in RA
* @rings_inuse: bitfield for ring usage tracking * @rings_inuse: bitfield for ring usage tracking
* @rm_gp_range: general purpose rings range from tisci * @rm_gp_range: general purpose rings range from tisci
* @dma_ring_reset_quirk: DMA reset w/a enable * @dma_ring_reset_quirk: DMA reset workaround enable
* @num_proxies: number of RA proxies * @num_proxies: number of RA proxies
* @proxy_inuse: bitfield for proxy usage tracking * @proxy_inuse: bitfield for proxy usage tracking
* @rings: array of rings descriptors (struct @k3_ring) * @rings: array of rings descriptors (struct @k3_ring)
...@@ -229,9 +229,9 @@ struct k3_ringacc { ...@@ -229,9 +229,9 @@ struct k3_ringacc {
}; };
/** /**
* struct k3_ringacc - Rings accelerator SoC data * struct k3_ringacc_soc_data - Rings accelerator SoC data
* *
* @dma_ring_reset_quirk: DMA reset w/a enable * @dma_ring_reset_quirk: DMA reset workaround enable
*/ */
struct k3_ringacc_soc_data { struct k3_ringacc_soc_data {
unsigned dma_ring_reset_quirk:1; unsigned dma_ring_reset_quirk:1;
...@@ -1368,15 +1368,12 @@ static int k3_ringacc_init(struct platform_device *pdev, ...@@ -1368,15 +1368,12 @@ static int k3_ringacc_init(struct platform_device *pdev,
const struct soc_device_attribute *soc; const struct soc_device_attribute *soc;
void __iomem *base_fifo, *base_rt; void __iomem *base_fifo, *base_rt;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct resource *res;
int ret, i; int ret, i;
dev->msi.domain = of_msi_get_domain(dev, dev->of_node, dev->msi.domain = of_msi_get_domain(dev, dev->of_node,
DOMAIN_BUS_TI_SCI_INTA_MSI); DOMAIN_BUS_TI_SCI_INTA_MSI);
if (!dev->msi.domain) { if (!dev->msi.domain)
dev_err(dev, "Failed to get MSI domain\n");
return -EPROBE_DEFER; return -EPROBE_DEFER;
}
ret = k3_ringacc_probe_dt(ringacc); ret = k3_ringacc_probe_dt(ringacc);
if (ret) if (ret)
...@@ -1389,24 +1386,20 @@ static int k3_ringacc_init(struct platform_device *pdev, ...@@ -1389,24 +1386,20 @@ static int k3_ringacc_init(struct platform_device *pdev,
ringacc->dma_ring_reset_quirk = soc_data->dma_ring_reset_quirk; ringacc->dma_ring_reset_quirk = soc_data->dma_ring_reset_quirk;
} }
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "rt"); base_rt = devm_platform_ioremap_resource_byname(pdev, "rt");
base_rt = devm_ioremap_resource(dev, res);
if (IS_ERR(base_rt)) if (IS_ERR(base_rt))
return PTR_ERR(base_rt); return PTR_ERR(base_rt);
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "fifos"); base_fifo = devm_platform_ioremap_resource_byname(pdev, "fifos");
base_fifo = devm_ioremap_resource(dev, res);
if (IS_ERR(base_fifo)) if (IS_ERR(base_fifo))
return PTR_ERR(base_fifo); return PTR_ERR(base_fifo);
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "proxy_gcfg"); ringacc->proxy_gcfg = devm_platform_ioremap_resource_byname(pdev, "proxy_gcfg");
ringacc->proxy_gcfg = devm_ioremap_resource(dev, res);
if (IS_ERR(ringacc->proxy_gcfg)) if (IS_ERR(ringacc->proxy_gcfg))
return PTR_ERR(ringacc->proxy_gcfg); return PTR_ERR(ringacc->proxy_gcfg);
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, ringacc->proxy_target_base = devm_platform_ioremap_resource_byname(pdev,
"proxy_target"); "proxy_target");
ringacc->proxy_target_base = devm_ioremap_resource(dev, res);
if (IS_ERR(ringacc->proxy_target_base)) if (IS_ERR(ringacc->proxy_target_base))
return PTR_ERR(ringacc->proxy_target_base); return PTR_ERR(ringacc->proxy_target_base);
...@@ -1473,7 +1466,6 @@ struct k3_ringacc *k3_ringacc_dmarings_init(struct platform_device *pdev, ...@@ -1473,7 +1466,6 @@ struct k3_ringacc *k3_ringacc_dmarings_init(struct platform_device *pdev,
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct k3_ringacc *ringacc; struct k3_ringacc *ringacc;
void __iomem *base_rt; void __iomem *base_rt;
struct resource *res;
int i; int i;
ringacc = devm_kzalloc(dev, sizeof(*ringacc), GFP_KERNEL); ringacc = devm_kzalloc(dev, sizeof(*ringacc), GFP_KERNEL);
...@@ -1488,8 +1480,7 @@ struct k3_ringacc *k3_ringacc_dmarings_init(struct platform_device *pdev, ...@@ -1488,8 +1480,7 @@ struct k3_ringacc *k3_ringacc_dmarings_init(struct platform_device *pdev,
mutex_init(&ringacc->req_lock); mutex_init(&ringacc->req_lock);
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ringrt"); base_rt = devm_platform_ioremap_resource_byname(pdev, "ringrt");
base_rt = devm_ioremap_resource(dev, res);
if (IS_ERR(base_rt)) if (IS_ERR(base_rt))
return ERR_CAST(base_rt); return ERR_CAST(base_rt);
......
...@@ -45,6 +45,7 @@ static const struct k3_soc_id { ...@@ -45,6 +45,7 @@ static const struct k3_soc_id {
{ 0xBB7E, "AM62X" }, { 0xBB7E, "AM62X" },
{ 0xBB80, "J784S4" }, { 0xBB80, "J784S4" },
{ 0xBB8D, "AM62AX" }, { 0xBB8D, "AM62AX" },
{ 0xBB9D, "AM62PX" },
}; };
static int static int
......
...@@ -14,8 +14,10 @@ ...@@ -14,8 +14,10 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/mfd/syscon.h> #include <linux/mfd/syscon.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/of.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/of_device.h> #include <linux/of_platform.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/pruss_driver.h> #include <linux/pruss_driver.h>
#include <linux/regmap.h> #include <linux/regmap.h>
......
...@@ -9,9 +9,10 @@ ...@@ -9,9 +9,10 @@
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/irqdomain.h> #include <linux/irqdomain.h>
#include <linux/msi.h> #include <linux/msi.h>
#include <linux/of.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/of_device.h>
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/platform_device.h>
#include <linux/soc/ti/ti_sci_inta_msi.h> #include <linux/soc/ti/ti_sci_inta_msi.h>
#include <linux/soc/ti/ti_sci_protocol.h> #include <linux/soc/ti/ti_sci_protocol.h>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment