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

Commit 7222b176 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "net: danipc: Add generic support for fsm targets"

parents 957ecf0e 3e7fada4
Loading
Loading
Loading
Loading
+40 −40
Original line number Diff line number Diff line
@@ -6,32 +6,32 @@ for fast and reliable data passing between processors.

Required properties:
- compatible:	should be "qcom,danipc"
- reg-names:	"ipc_bufs" - Krait IPC buffers region
- reg-names:	"ipc_bufs" - APPS IPC buffers region
		"agent_table" - IPC global agent table region
		"krait_ipc_intr_en" - Krait IPC interrupt enable MUX region
		"cpu0_ipc" - CPU0 IPC region
		"cpu1_ipc" - CPU1 IPC region
		"cpu2_ipc" - CPU2 IPC region
		"cpu3_ipc" - CPU3 IPC region
		"dsp0_ipc" - DSP0 IPC region
		"dsp1_ipc" - DSP1 IPC region
		"dsp2_ipc" - DSP2 IPC region
		"krait_ipc" - Krait IPC region
		"apps_ipc_intr_en" - APPS IPC interrupt enable MUX region
		"phycpu0_ipc" - PHY CPU0 IPC region
		"phycpu1_ipc" - PHY CPU1 IPC region
		"phycpu2_ipc" - PHY CPU2 IPC region
		"phycpu3_ipc" - PHY CPU3 IPC region
		"phydsp0_ipc" - PHY DSP0 IPC region
		"phydsp1_ipc" - PHY DSP1 IPC region
		"phydsp2_ipc" - PHY DSP2 IPC region
		"apps_ipc" - APPS IPC region
		"qdsp6_0_ipc" - QDSP6 0 IPC region
		"qdsp6_1_ipc" - QDSP6 1 IPC region
		"qdsp6_2_ipc" - QDSP6 2 IPC region
		"qdsp6_3_ipc" - QDSP6 3 IPC region
- reg:		location and size of Krait IPC buffers
- reg:		location and size of APPS IPC buffers
		location and size of IPC global agent table
		location and size of Krait IPC interrupt enable MUX
		location and size of CPU0 IPC region
		location and size of CPU1 IPC region
		location and size of CPU2 IPC region
		location and size of CPU3 IPC region
		location and size of DSP0 IPC region
		location and size of DSP1 IPC region
		location and size of DSP2 IPC region
		location and size of Krait IPC region
		location and size of APPS IPC interrupt enable MUX
		location and size of PHY CPU0 IPC region
		location and size of PHY CPU1 IPC region
		location and size of PHY CPU2 IPC region
		location and size of PHY CPU3 IPC region
		location and size of PHY DSP0 IPC region
		location and size of PHY DSP1 IPC region
		location and size of PHY DSP2 IPC region
		location and size of APPS IPC region
		location and size of QDSP6 0 IPC region
		location and size of QDSP6 1 IPC region
		location and size of QDSP6 2 IPC region
@@ -39,14 +39,14 @@ Required properties:
- interrupts:	IPC interrupt line

Optional properties:
-qcom,cpu0-shm-size: size of shared memory region for CPU0
-qcom,cpu1-shm-size: size of shared memory region for CPU1
-qcom,cpu2-shm-size: size of shared memory region for CPU2
-qcom,cpu3-shm-size: size of shared memory region for CPU3
-qcom,dsp0-shm-size: size of shared memory region for DSP0
-qcom,dsp1-shm-size: size of shared memory region for DSP1
-qcom,dsp2-shm-size: size of shared memory region for DSP2
-qcom,krait-shm-size: size of shared memory region for Krait
-qcom,phycpu0-shm-size: size of shared memory region for PHY CPU0
-qcom,phycpu1-shm-size: size of shared memory region for PHY CPU1
-qcom,phycpu2-shm-size: size of shared memory region for PHY CPU2
-qcom,phycpu3-shm-size: size of shared memory region for PHY CPU3
-qcom,phydsp0-shm-size: size of shared memory region for PHY DSP0
-qcom,phydsp1-shm-size: size of shared memory region for PHY DSP1
-qcom,phydsp2-shm-size: size of shared memory region for PHY DSP2
-qcom,apps-shm-size: size of shared memory region for APPS
-qcom,qdsp6-0-shm-size: size of shared memory region for QDSP6 0
-qcom,qdsp6-1-shm-size: size of shared memory region for QDSP6 1
-qcom,qdsp6-2-shm-size: size of shared memory region for QDSP6 2
@@ -55,22 +55,22 @@ Optional properties:
Examples:
	qcom,danipc@24200000 {
		compatible = "qcom,danipc";
		reg-names = "ipc_bufs", "agent_table", "krait_ipc_intr_en",
				"cpu0_ipc", "cpu1_ipc", "cpu2_ipc", "cpu3_ipc",
				"dsp0_ipc", "dsp1_ipc", "dsp2_ipc", "krait_ipc",
		reg-names = "ipc_bufs", "agent_table", "apps_ipc_intr_en",
				"phycpu0_ipc", "phycpu1_ipc", "phycpu2_ipc", "phycpu3_ipc",
				"phydsp0_ipc", "phydsp1_ipc", "phydsp2_ipc", "apps_ipc",
				"qdsp6_0_ipc", "qdsp6_1_ipc", "qdsp6_2_ipc",
				"qdsp6_3_ipc";
		reg = <0x24200000 0x80000>, /* ipc_bufs */
			<0x1cf60000 0x2000>, /* agent_table */
			<0xfd4a3500 0x100>, /* krait_ipc_intr_en */
			<0xf683a000 0x100>, /* cpu0_ipc */
			<0xf683a000 0x100>, /* cpu1_ipc */
			<0xf683c000 0x100>, /* cpu2_ipc */
			<0xf683c000 0x100>, /* cpu3_ipc */
			<0xf6862000 0x100>, /* dsp0_ipc */
			<0xf6862000 0x100>, /* dsp1_ipc */
			<0xf6878000 0x100>, /* dsp2_ipc */
			<0xfd490000 0x100>, /* krait_ipc */
			<0xfd4a3500 0x100>, /* apps_ipc_intr_en */
			<0xf683a000 0x100>, /* phycpu0_ipc */
			<0xf683a000 0x100>, /* phycpu1_ipc */
			<0xf683c000 0x100>, /* phycpu2_ipc */
			<0xf683c000 0x100>, /* phycpu3_ipc */
			<0xf6862000 0x100>, /* phydsp0_ipc */
			<0xf6862000 0x100>, /* phydsp1_ipc */
			<0xf6878000 0x100>, /* phydsp2_ipc */
			<0xfd490000 0x100>, /* apps_ipc */
			<0xfd491000 0x100>, /* qdsp6_0_ipc */
			<0xfd492000 0x100>, /* qdsp6_1_ipc */
			<0xfd496000 0x100>, /* qdsp6_2_ipc */
+22 −1
Original line number Diff line number Diff line
/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -364,6 +364,27 @@
		};
	};

	qcom,danipc@21000000 {
		compatible = "qcom,danipc";
		reg-names = "ipc_bufs", "agent_table", "apps_ipc_intr_en",
			"phycpu0_ipc", "phycpu1_ipc", "phycpu2_ipc",
			"phydsp0_ipc", "phydsp1_ipc", "apps_ipc",
			"qdsp6_0_ipc", "qdsp6_1_ipc";
		reg = <0x21000000 0x80000>, /* ipc_bufs */
			<0x13e60000 0x2000>, /* agent_table */
			<0xfd4a3500 0x100>, /* apps_ipc_intr_en */
			<0xf683a000 0x100>, /* phycpu0_ipc */
			<0xf683a000 0x100>, /* phycpu1_ipc */
			<0xf683c000 0x100>, /* phycpu2_ipc */
			<0xf6862000 0x100>, /* phydsp0_ipc */
			<0xf6862000 0x100>, /* phydsp1_ipc */
			<0xfd490000 0x100>, /* apps_ipc */
			<0xfd495000 0x100>, /* qdsp6_0_ipc */
			<0xfd496000 0x100>; /* qdsp6_1_ipc */
		qcom,qdsp6-1-shm-size = <0x4000000>;
		interrupts = <0 202 0>;
	};

	qcom,msm-imem@fe805000 {
		compatible = "qcom,msm-imem";
		reg = <0xfe805000 0x1000>; /* Address and size of IMEM */
+13 −13
Original line number Diff line number Diff line
/* Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -1815,22 +1815,22 @@

	qcom,danipc@24200000 {
		compatible = "qcom,danipc";
		reg-names = "ipc_bufs", "agent_table", "krait_ipc_intr_en",
			"cpu0_ipc", "cpu1_ipc", "cpu2_ipc", "cpu3_ipc",
			"dsp0_ipc", "dsp1_ipc", "dsp2_ipc", "krait_ipc",
		reg-names = "ipc_bufs", "agent_table", "apps_ipc_intr_en",
			"phycpu0_ipc", "phycpu1_ipc", "phycpu2_ipc", "phycpu3_ipc",
			"phydsp0_ipc", "phydsp1_ipc", "phydsp2_ipc", "apps_ipc",
			"qdsp6_0_ipc", "qdsp6_1_ipc", "qdsp6_2_ipc",
			"qdsp6_3_ipc";
		reg = <0x24200000 0x80000>, /* ipc_bufs */
			<0x1cf60000 0x2000>, /* agent_table */
			<0xfd4a3500 0x100>, /* krait_ipc_intr_en */
			<0xf683a000 0x100>, /* cpu0_ipc */
			<0xf683a000 0x100>, /* cpu1_ipc */
			<0xf683c000 0x100>, /* cpu2_ipc */
			<0xf683c000 0x100>, /* cpu3_ipc */
			<0xf6862000 0x100>, /* dsp0_ipc */
			<0xf6862000 0x100>, /* dsp1_ipc */
			<0xf6878000 0x100>, /* dsp2_ipc */
			<0xfd490000 0x100>, /* krait_ipc */
			<0xfd4a3500 0x100>, /* apps_ipc_intr_en */
			<0xf683a000 0x100>, /* phycpu0_ipc */
			<0xf683a000 0x100>, /* phycpu1_ipc */
			<0xf683c000 0x100>, /* phycpu2_ipc */
			<0xf683c000 0x100>, /* phycpu3_ipc */
			<0xf6862000 0x100>, /* phydsp0_ipc */
			<0xf6862000 0x100>, /* phydsp1_ipc */
			<0xf6878000 0x100>, /* phydsp2_ipc */
			<0xfd490000 0x100>, /* apps_ipc */
			<0xfd491000 0x100>, /* qdsp6_0_ipc */
			<0xfd492000 0x100>, /* qdsp6_1_ipc */
			<0xfd496000 0x100>, /* qdsp6_2_ipc */
+11 −11
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ uint8_t __iomem *ipc_buffers;

struct ipc_to_virt_map		ipc_to_virt_map[PLATFORM_MAX_NUM_OF_NODES][2];

static void __iomem		*krait_ipc_mux;
static void __iomem		*apps_ipc_mux;

static void init_own_ipc_to_virt_map(struct danipc_priv *priv)
{
@@ -239,7 +239,7 @@ void danipc_init_irq(struct net_device *dev, struct danipc_priv *priv)
				(void *)(base_addr + CDU_INT0_MASK_F0));

	/* Route interrupts from TCSR to APPS (only relevant to APPS-FIFO) */
	__raw_writel_no_log(APPS_IPC_FIFO_INT, krait_ipc_mux);
	__raw_writel_no_log(APPS_IPC_FIFO_INT, apps_ipc_mux);
}


@@ -277,7 +277,7 @@ static void prepare_nodes(void)
	int		n;

	for (n = 0; n < PLATFORM_MAX_NUM_OF_NODES; n++)
		if (ipc_regs_phys[n])
		if (ipc_regs_len[n])
			prepare_node(n);
}

@@ -309,21 +309,21 @@ static void free_ipc_buffers(void)
		iounmap(ipc_buffers);
}

static void remap_krait_ipc_mux(struct danipc_priv *priv)
static void remap_apps_ipc_mux(struct danipc_priv *priv)
{
	krait_ipc_mux = ioremap_nocache(priv->res_start[KRAIT_IPC_MUX_RES],
	apps_ipc_mux = ioremap_nocache(priv->res_start[KRAIT_IPC_MUX_RES],
					priv->res_len[KRAIT_IPC_MUX_RES]);
	if (!krait_ipc_mux) {
	if (!apps_ipc_mux) {
		pr_err("%s: cannot remap Krait IPC mux\n", __func__);
		BUG();
	}
}


static void unmap_krait_ipc_mux(void)
static void unmap_apps_ipc_mux(void)
{
	if (krait_ipc_mux)
		iounmap(krait_ipc_mux);
	if (apps_ipc_mux)
		iounmap(apps_ipc_mux);
}


@@ -335,7 +335,7 @@ int danipc_ll_init(struct danipc_priv *priv)
		prepare_nodes();
		remap_agent_table(priv);
		init_own_ipc_to_virt_map(priv);
		remap_krait_ipc_mux(priv);
		remap_apps_ipc_mux(priv);
		rc = ipc_init();
	}

@@ -345,7 +345,7 @@ int danipc_ll_init(struct danipc_priv *priv)

void danipc_ll_cleanup(void)
{
	unmap_krait_ipc_mux();
	unmap_apps_ipc_mux();
	unmap_ipc_to_virt_map();
	unmap_agent_table();
	unmap_nodes_memory();
+13 −11
Original line number Diff line number Diff line
@@ -192,19 +192,19 @@ static int parse_resources(struct platform_device *pdev,
				struct danipc_priv *priv)
{
	const char		*regs[PLATFORM_MAX_NUM_OF_NODES] = {
		"cpu0_ipc", "cpu1_ipc", "cpu2_ipc", "cpu3_ipc",
		"dsp0_ipc", "dsp1_ipc", "dsp2_ipc", NULL,
		"krait_ipc", "qdsp6_0_ipc", "qdsp6_1_ipc", "qdsp6_2_ipc",
		"phycpu0_ipc", "phycpu1_ipc", "phycpu2_ipc", "phycpu3_ipc",
		"phydsp0_ipc", "phydsp1_ipc", "phydsp2_ipc", NULL,
		"apps_ipc", "qdsp6_0_ipc", "qdsp6_1_ipc", "qdsp6_2_ipc",
		"qdsp6_3_ipc", NULL, NULL, NULL
	};
	const char		*resource[RESOURCE_NUM] = {
		"ipc_bufs", "agent_table", "krait_ipc_intr_en"
		"ipc_bufs", "agent_table", "apps_ipc_intr_en"
	};
	const char		*shm_sizes[PLATFORM_MAX_NUM_OF_NODES] = {
		"qcom,cpu0-shm-size", "qcom,cpu1-shm-size",
		"qcom,cpu2-shm-size", "qcom,cpu3-shm-size",
		"qcom,dsp0-shm-size", "qcom,dsp1-shm-size",
		"qcom,dsp2-shm-size", NULL, "qcom,krait-shm-size",
		"qcom,phycpu0-shm-size", "qcom,phycpu1-shm-size",
		"qcom,phycpu2-shm-size", "qcom,phycpu3-shm-size",
		"qcom,phydsp0-shm-size", "qcom,phydsp1-shm-size",
		"qcom,phydsp2-shm-size", NULL, "qcom,apps-shm-size",
		"qcom,qdsp6-0-shm-size", "qcom,qdsp6-1-shm-size",
		"qcom,qdsp6-2-shm-size", "qcom,qdsp6-3-shm-size",
		NULL, NULL, NULL
@@ -245,9 +245,6 @@ static int parse_resources(struct platform_device *pdev,
			if (res) {
				ipc_regs_phys[r] = res->start;
				ipc_regs_len[r] = resource_size(res);
			} else {
				pr_err("cannot get resource %s\n", regs[r]);
				parse_err = true;
			}

			if (of_property_read_u32((&pdev->dev)->of_node,
@@ -258,6 +255,11 @@ static int parse_resources(struct platform_device *pdev,
				ipc_shared_mem_sizes[r] = shm_size;
		}

		if (ipc_regs_len[LOCAL_IPC_ID] == 0) {
			pr_err("cannot get fifo resource for %s\n", regs[r]);
			parse_err = true;
		}

		rc = (!parse_err) ? 0 : -ENOMEM;
	}