From 1c7d6584a7811b7785ae5c1e378f14b5ba0971cf Mon Sep 17 00:00:00 2001 From: takeshi_hoshina Date: Mon, 2 Nov 2020 11:07:33 +0900 Subject: basesystem-jj recipes --- ...0487-i2c-busses-i2c-rcar-block-pm_runtime.patch | 80 ++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0487-i2c-busses-i2c-rcar-block-pm_runtime.patch (limited to 'bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0487-i2c-busses-i2c-rcar-block-pm_runtime.patch') diff --git a/bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0487-i2c-busses-i2c-rcar-block-pm_runtime.patch b/bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0487-i2c-busses-i2c-rcar-block-pm_runtime.patch new file mode 100644 index 00000000..24ec8902 --- /dev/null +++ b/bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0487-i2c-busses-i2c-rcar-block-pm_runtime.patch @@ -0,0 +1,80 @@ +From 7fc6b55fbd279e287a350b85f45885d51c4de5c4 Mon Sep 17 00:00:00 2001 +From: Vladimir Barinov +Date: Wed, 25 Mar 2020 15:07:48 +0300 +Subject: [PATCH] i2c: busses i2c-rcar: block pm_runtime + +This allows blocking of i2c clock runtime control by existing dts +pataremeter multi-master. +This speeds up i2c transaction during stress use case. + +Signed-off-by: Vladimir Barinov +--- + drivers/i2c/busses/i2c-rcar.c | 17 ++++++++++++----- + 1 file changed, 12 insertions(+), 5 deletions(-) + +diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c +index ddd3b39..4a3ea72 100644 +--- a/drivers/i2c/busses/i2c-rcar.c ++++ b/drivers/i2c/busses/i2c-rcar.c +@@ -786,7 +786,8 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap, + if (priv->suspended) + return -EBUSY; + +- pm_runtime_get_sync(dev); ++ if (!(priv->flags & ID_P_PM_BLOCKED)) ++ pm_runtime_get_sync(dev); + + /* Check bus state before init otherwise bus busy info will be lost */ + ret = rcar_i2c_bus_barrier(priv); +@@ -826,7 +827,8 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap, + ret = num - priv->msgs_left; /* The number of transfer */ + } + out: +- pm_runtime_put(dev); ++ if (!(priv->flags & ID_P_PM_BLOCKED)) ++ pm_runtime_put(dev); + + if (ret < 0 && ret != -ENXIO) + dev_err(dev, "error %d : %x\n", ret, priv->flags); +@@ -845,7 +847,8 @@ static int rcar_reg_slave(struct i2c_client *slave) + return -EAFNOSUPPORT; + + /* Keep device active for slave address detection logic */ +- pm_runtime_get_sync(rcar_i2c_priv_to_dev(priv)); ++ if (!(priv->flags & ID_P_PM_BLOCKED)) ++ pm_runtime_get_sync(rcar_i2c_priv_to_dev(priv)); + + priv->slave = slave; + rcar_i2c_write(priv, ICSAR, slave->addr); +@@ -867,7 +870,8 @@ static int rcar_unreg_slave(struct i2c_client *slave) + + priv->slave = NULL; + +- pm_runtime_put(rcar_i2c_priv_to_dev(priv)); ++ if (!(priv->flags & ID_P_PM_BLOCKED)) ++ pm_runtime_put(rcar_i2c_priv_to_dev(priv)); + + return 0; + } +@@ -1026,6 +1030,8 @@ static int rcar_i2c_suspend(struct device *dev) + struct platform_device *pdev = to_platform_device(dev); + struct rcar_i2c_priv *priv = platform_get_drvdata(pdev); + ++ if (priv->flags & ID_P_PM_BLOCKED) ++ pm_runtime_put(dev); + priv->suspended = 1; + + return 0; +@@ -1045,7 +1051,8 @@ static int rcar_i2c_resume(struct device *dev) + dev_err(dev, "Could not calculate clock\n"); + + rcar_i2c_init(priv); +- pm_runtime_put(dev); ++ if (!(priv->flags & ID_P_PM_BLOCKED)) ++ pm_runtime_put(dev); + + priv->suspended = 0; + +-- +2.7.4 + -- cgit 1.2.3-korg