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

Commit d7eab285 authored by Vikram Mulukutla's avatar Vikram Mulukutla
Browse files

qcom: peripheral-loader: Introduce an API to free relocatable memory



Give implementations the freedom to separately invoke
an API that frees relocatable memory, instead of mandatorily
freeing the memory in shutdown().

Change-Id: I802e06fd16c20a777066331ee490f51bcc019b8b
Signed-off-by: default avatarVikram Mulukutla <markivx@codeaurora.org>
parent f69bf803
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -781,6 +781,16 @@ void pil_shutdown(struct pil_desc *desc)
		pil_proxy_unvote(desc, 1);
	else
		flush_delayed_work(&priv->proxy);
}
EXPORT_SYMBOL(pil_shutdown);

/**
 * pil_free_memory() - Free memory resources associated with a peripheral
 * @desc: descriptor from pil_desc_init()
 */
void pil_free_memory(struct pil_desc *desc)
{
	struct pil_priv *priv = desc->priv;

	if (priv->region) {
		dma_free_attrs(desc->dev, priv->region_size,
@@ -788,7 +798,7 @@ void pil_shutdown(struct pil_desc *desc)
		priv->region = NULL;
	}
}
EXPORT_SYMBOL(pil_shutdown);
EXPORT_SYMBOL(pil_free_memory);

static DEFINE_IDA(pil_ida);

+2 −0
Original line number Diff line number Diff line
@@ -96,6 +96,7 @@ struct pil_reset_ops {
extern int pil_desc_init(struct pil_desc *desc);
extern int pil_boot(struct pil_desc *desc);
extern void pil_shutdown(struct pil_desc *desc);
extern void pil_free_memory(struct pil_desc *desc);
extern void pil_desc_release(struct pil_desc *desc);
extern phys_addr_t pil_get_entry_addr(struct pil_desc *desc);
extern int pil_do_ramdump(struct pil_desc *desc, void *ramdump_dev);
@@ -103,6 +104,7 @@ extern int pil_do_ramdump(struct pil_desc *desc, void *ramdump_dev);
static inline int pil_desc_init(struct pil_desc *desc) { return 0; }
static inline int pil_boot(struct pil_desc *desc) { return 0; }
static inline void pil_shutdown(struct pil_desc *desc) { }
static inline void pil_free_memory(struct pil_desc *desc) { }
static inline void pil_desc_release(struct pil_desc *desc) { }
static inline phys_addr_t pil_get_entry_addr(struct pil_desc *desc)
{
+8 −0
Original line number Diff line number Diff line
@@ -154,6 +154,13 @@ static void modem_crash_shutdown(const struct subsys_desc *subsys)
	}
}

static void modem_free_memory(const struct subsys_desc *subsys)
{
	struct modem_data *drv = subsys_to_drv(subsys);

	pil_free_memory(&drv->q6->desc);
}

static int modem_ramdump(int enable, const struct subsys_desc *subsys)
{
	struct modem_data *drv = subsys_to_drv(subsys);
@@ -209,6 +216,7 @@ static int pil_subsys_init(struct modem_data *drv,
	drv->subsys_desc.shutdown = modem_shutdown;
	drv->subsys_desc.powerup = modem_powerup;
	drv->subsys_desc.ramdump = modem_ramdump;
	drv->subsys_desc.free_memory = modem_free_memory;
	drv->subsys_desc.crash_shutdown = modem_crash_shutdown;
	drv->subsys_desc.err_fatal_handler = modem_err_fatal_intr_handler;
	drv->subsys_desc.stop_ack_handler = modem_stop_ack_intr_handler;
+8 −0
Original line number Diff line number Diff line
@@ -813,6 +813,13 @@ static int subsys_ramdump(int enable, const struct subsys_desc *subsys)
	return pil_do_ramdump(&d->desc, d->ramdump_dev);
}

static void subsys_free_memory(const struct subsys_desc *subsys)
{
	struct pil_tz_data *d = subsys_to_data(subsys);

	pil_free_memory(&d->desc);
}

static void subsys_crash_shutdown(const struct subsys_desc *subsys)
{
	struct pil_tz_data *d = subsys_to_data(subsys);
@@ -937,6 +944,7 @@ static int pil_tz_driver_probe(struct platform_device *pdev)
	d->subsys_desc.shutdown = subsys_shutdown;
	d->subsys_desc.powerup = subsys_powerup;
	d->subsys_desc.ramdump = subsys_ramdump;
	d->subsys_desc.free_memory = subsys_free_memory;
	d->subsys_desc.crash_shutdown = subsys_crash_shutdown;
	d->subsys_desc.err_fatal_handler = subsys_err_fatal_intr_handler;
	d->subsys_desc.wdog_bite_handler = subsys_wdog_bite_irq_handler;