Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fae69cd8 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "soc: qcom: Check rmb status register for spss bootup status"

parents b318939c 6ba31451
Loading
Loading
Loading
Loading
+25 −13
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ struct pil_tz_data {
	void __iomem *irq_mask;
	void __iomem *err_status;
	void __iomem *err_status_spare;
	void __iomem *rmb_gp_reg;
	u32 bits_arr[2];
	int err_fatal_irq;
	int err_ready_irq;
@@ -1304,7 +1305,7 @@ static int pil_tz_generic_probe(struct platform_device *pdev)
{
	struct pil_tz_data *d;
	struct resource *res;
	u32 proxy_timeout;
	u32 proxy_timeout, rmb_gp_reg_val;
	int len, rc;
	char md_node[20];

@@ -1326,9 +1327,6 @@ static int pil_tz_generic_probe(struct platform_device *pdev)
	if (of_property_read_bool(pdev->dev.of_node, "qcom,pil-no-auth"))
		d->subsys_desc.no_auth = true;

	if (of_property_read_bool(pdev->dev.of_node, "qcom,boot-enabled"))
		d->boot_enabled = true;

	d->keep_proxy_regs_on = of_property_read_bool(pdev->dev.of_node,
						"qcom,keep-proxy-regs-on");

@@ -1398,21 +1396,35 @@ static int pil_tz_generic_probe(struct platform_device *pdev)
	d->subsys_desc.dev = &pdev->dev;
	d->subsys_desc.shutdown = subsys_shutdown;
	d->subsys_desc.powerup = subsys_powerup;

	/*
	 * If subsystem is already bought out reset during the bootloader stage,
	 * instead of doing regular power need to check subsystem status.
	 * So override power up function to check subsystem crash status.
	 */
	if (d->boot_enabled)
		d->subsys_desc.powerup = subsys_powerup_boot_enabled;

	d->subsys_desc.ramdump = subsys_ramdump;
	d->subsys_desc.free_memory = subsys_free_memory;
	d->subsys_desc.crash_shutdown = subsys_crash_shutdown;

	if (of_property_read_bool(pdev->dev.of_node,
					"qcom,pil-generic-irq-handler")) {

		res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
						"rmb_general_purpose");
		d->rmb_gp_reg = devm_ioremap_resource(&pdev->dev, res);
		if (IS_ERR(d->rmb_gp_reg)) {
			dev_err(&pdev->dev, "Invalid resource for rmb_gp_reg\n");
			rc = PTR_ERR(d->rmb_gp_reg);
			goto err_ramdump;
		}

		rmb_gp_reg_val = __raw_readl(d->rmb_gp_reg);
		/*
		 * If subsystem is already bought out reset during the
		 * bootloader stage, need to check subsystem status instead
		 * of doing regular power. So override power up function
		 * to check subsystem crash status.
		 */
		if (!(rmb_gp_reg_val & BIT(0))) {
			d->boot_enabled = true;
			pr_info("spss is brought out of reset by UEFI\n");
			d->subsys_desc.powerup = subsys_powerup_boot_enabled;
		}

		res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
						"sp2soc_irq_status");
		d->irq_status = devm_ioremap_resource(&pdev->dev, res);