Unverified Commit be6d2636 authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

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

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

TI SoC driver updates for v6.18

- ti_sci: Add support for abort handling of entry to Low Power Mode
- k3-socinfo: Add decode for AM62L SR1.1 silicon revision
- pruss: Replace usage of %pK in printk with safer %p formatting

* tag 'ti-driver-soc-for-v6.18' of https://git.kernel.org/pub/scm/linux/kernel/git/ti/linux:
  soc: ti: k3-socinfo: Add information for AM62L SR1.1
  firmware: ti_sci: Enable abort handling of entry to LPM
  soc: ti: pruss: don't use %pK through printk

Link: https://lore.kernel.org/r/20250916175441.iehltsk2377rg5c6@alike


Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents 833bb53d 037e4960
Loading
Loading
Loading
Loading
+55 −2
Original line number Diff line number Diff line
@@ -2015,6 +2015,47 @@ static int ti_sci_cmd_set_latency_constraint(const struct ti_sci_handle *handle,
	return ret;
}

/**
 * ti_sci_cmd_lpm_abort() - Abort entry to LPM by clearing selection of LPM to enter
 * @dev:	Device pointer corresponding to the SCI entity
 *
 * Return: 0 if all went well, else returns appropriate error value.
 */
static int ti_sci_cmd_lpm_abort(struct device *dev)
{
	struct ti_sci_info *info = dev_get_drvdata(dev);
	struct ti_sci_msg_hdr *req;
	struct ti_sci_msg_hdr *resp;
	struct ti_sci_xfer *xfer;
	int ret = 0;

	xfer = ti_sci_get_one_xfer(info, TI_SCI_MSG_LPM_ABORT,
				   TI_SCI_FLAG_REQ_ACK_ON_PROCESSED,
				   sizeof(*req), sizeof(*resp));
	if (IS_ERR(xfer)) {
		ret = PTR_ERR(xfer);
		dev_err(dev, "Message alloc failed(%d)\n", ret);
		return ret;
	}
	req = (struct ti_sci_msg_hdr *)xfer->xfer_buf;

	ret = ti_sci_do_xfer(info, xfer);
	if (ret) {
		dev_err(dev, "Mbox send fail %d\n", ret);
		goto fail;
	}

	resp = (struct ti_sci_msg_hdr *)xfer->xfer_buf;

	if (!ti_sci_is_response_ack(resp))
		ret = -ENODEV;

fail:
	ti_sci_put_one_xfer(&info->minfo, xfer);

	return ret;
}

static int ti_sci_cmd_core_reboot(const struct ti_sci_handle *handle)
{
	struct ti_sci_info *info;
@@ -3739,11 +3780,22 @@ static int __maybe_unused ti_sci_resume_noirq(struct device *dev)
	return 0;
}

static void __maybe_unused ti_sci_pm_complete(struct device *dev)
{
	struct ti_sci_info *info = dev_get_drvdata(dev);

	if (info->fw_caps & MSG_FLAG_CAPS_LPM_ABORT) {
		if (ti_sci_cmd_lpm_abort(dev))
			dev_err(dev, "LPM clear selection failed.\n");
	}
}

static const struct dev_pm_ops ti_sci_pm_ops = {
#ifdef CONFIG_PM_SLEEP
	.suspend = ti_sci_suspend,
	.suspend_noirq = ti_sci_suspend_noirq,
	.resume_noirq = ti_sci_resume_noirq,
	.complete = ti_sci_pm_complete,
#endif
};

@@ -3876,10 +3928,11 @@ static int ti_sci_probe(struct platform_device *pdev)
	}

	ti_sci_msg_cmd_query_fw_caps(&info->handle, &info->fw_caps);
	dev_dbg(dev, "Detected firmware capabilities: %s%s%s\n",
	dev_dbg(dev, "Detected firmware capabilities: %s%s%s%s\n",
		info->fw_caps & MSG_FLAG_CAPS_GENERIC ? "Generic" : "",
		info->fw_caps & MSG_FLAG_CAPS_LPM_PARTIAL_IO ? " Partial-IO" : "",
		info->fw_caps & MSG_FLAG_CAPS_LPM_DM_MANAGED ? " DM-Managed" : ""
		info->fw_caps & MSG_FLAG_CAPS_LPM_DM_MANAGED ? " DM-Managed" : "",
		info->fw_caps & MSG_FLAG_CAPS_LPM_ABORT ? " LPM-Abort" : ""
	);

	ti_sci_setup_ops(info);
+3 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@
#define TI_SCI_MSG_SET_IO_ISOLATION	0x0307
#define TI_SCI_MSG_LPM_SET_DEVICE_CONSTRAINT	0x0309
#define TI_SCI_MSG_LPM_SET_LATENCY_CONSTRAINT	0x030A
#define TI_SCI_MSG_LPM_ABORT	0x0311

/* Resource Management Requests */
#define TI_SCI_MSG_GET_RESOURCE_RANGE	0x1500
@@ -147,6 +148,7 @@ struct ti_sci_msg_req_reboot {
 *		MSG_FLAG_CAPS_GENERIC: Generic capability (LPM not supported)
 *		MSG_FLAG_CAPS_LPM_PARTIAL_IO: Partial IO in LPM
 *		MSG_FLAG_CAPS_LPM_DM_MANAGED: LPM can be managed by DM
 *		MSG_FLAG_CAPS_LPM_ABORT: Abort entry to LPM
 *
 * Response to a generic message with message type TI_SCI_MSG_QUERY_FW_CAPS
 * providing currently available SOC/firmware capabilities. SoC that don't
@@ -157,6 +159,7 @@ struct ti_sci_msg_resp_query_fw_caps {
#define MSG_FLAG_CAPS_GENERIC		TI_SCI_MSG_FLAG(0)
#define MSG_FLAG_CAPS_LPM_PARTIAL_IO	TI_SCI_MSG_FLAG(4)
#define MSG_FLAG_CAPS_LPM_DM_MANAGED	TI_SCI_MSG_FLAG(5)
#define MSG_FLAG_CAPS_LPM_ABORT		TI_SCI_MSG_FLAG(9)
#define MSG_MASK_CAPS_LPM		GENMASK_ULL(4, 1)
	u64 fw_caps;
} __packed;
+10 −0
Original line number Diff line number Diff line
@@ -66,6 +66,10 @@ static const char * const j721e_rev_string_map[] = {
	"1.0", "1.1", "2.0",
};

static const char * const am62lx_rev_string_map[] = {
	"1.0", "1.1",
};

static int
k3_chipinfo_partno_to_names(unsigned int partno,
			    struct soc_device_attribute *soc_dev_attr)
@@ -92,6 +96,12 @@ k3_chipinfo_variant_to_sr(unsigned int partno, unsigned int variant,
		soc_dev_attr->revision = kasprintf(GFP_KERNEL, "SR%s",
						   j721e_rev_string_map[variant]);
		break;
	case JTAG_ID_PARTNO_AM62LX:
		if (variant >= ARRAY_SIZE(am62lx_rev_string_map))
			goto err_unknown_variant;
		soc_dev_attr->revision = kasprintf(GFP_KERNEL, "SR%s",
						   am62lx_rev_string_map[variant]);
		break;
	default:
		variant++;
		soc_dev_attr->revision = kasprintf(GFP_KERNEL, "SR%x.0",
+1 −1
Original line number Diff line number Diff line
@@ -449,7 +449,7 @@ static int pruss_of_setup_memories(struct device *dev, struct pruss *pruss)
		pruss->mem_regions[i].pa = res.start;
		pruss->mem_regions[i].size = resource_size(&res);

		dev_dbg(dev, "memory %8s: pa %pa size 0x%zx va %pK\n",
		dev_dbg(dev, "memory %8s: pa %pa size 0x%zx va %p\n",
			mem_names[i], &pruss->mem_regions[i].pa,
			pruss->mem_regions[i].size, pruss->mem_regions[i].va);
	}