From f07e572f6447465d8938679533d604e402b0f066 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Thu, 18 Feb 2021 18:04:33 +0100 Subject: bcm27xx: import latest patches from the RPi foundation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bcm2708: boot tested on RPi B+ v1.2 bcm2709: boot tested on RPi 3B v1.2 and RPi 4B v1.1 4G bcm2710: boot tested on RPi 3B v1.2 bcm2711: boot tested on RPi 4B v1.1 4G Signed-off-by: Álvaro Fernández Rojas --- .../950-0528-reset-simple-Add-reset-callback.patch | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 target/linux/bcm27xx/patches-5.4/950-0528-reset-simple-Add-reset-callback.patch (limited to 'target/linux/bcm27xx/patches-5.4/950-0528-reset-simple-Add-reset-callback.patch') diff --git a/target/linux/bcm27xx/patches-5.4/950-0528-reset-simple-Add-reset-callback.patch b/target/linux/bcm27xx/patches-5.4/950-0528-reset-simple-Add-reset-callback.patch new file mode 100644 index 0000000000..035c9d6aa0 --- /dev/null +++ b/target/linux/bcm27xx/patches-5.4/950-0528-reset-simple-Add-reset-callback.patch @@ -0,0 +1,85 @@ +From 66deff85fee24ecd7b0ffa2901711aa8f026fcfa Mon Sep 17 00:00:00 2001 +From: Maxime Ripard +Date: Tue, 28 Jan 2020 16:22:20 +0100 +Subject: [PATCH] reset: simple: Add reset callback + +The reset-simple code lacks a reset callback that is still pretty easy to +implement. The only real thing to consider is the delay needed for a device +to be reset, so let's expose that as part of the reset-simple driver data. + +Cc: Philipp Zabel +Signed-off-by: Maxime Ripard +--- + drivers/reset/reset-simple.c | 24 ++++++++++++++++++++++++ + include/linux/reset/reset-simple.h | 6 ++++++ + 2 files changed, 30 insertions(+) + +--- a/drivers/reset/reset-simple.c ++++ b/drivers/reset/reset-simple.c +@@ -11,6 +11,7 @@ + * Maxime Ripard + */ + ++#include + #include + #include + #include +@@ -63,6 +64,28 @@ static int reset_simple_deassert(struct + return reset_simple_update(rcdev, id, false); + } + ++static int reset_simple_reset(struct reset_controller_dev *rcdev, ++ unsigned long id) ++{ ++ struct reset_simple_data *data = to_reset_simple_data(rcdev); ++ int ret; ++ ++ if (!data->reset_us) ++ return -ENOTSUPP; ++ ++ ret = reset_simple_assert(rcdev, id); ++ if (ret) ++ return ret; ++ ++ usleep_range(data->reset_us, data->reset_us * 2); ++ ++ ret = reset_simple_deassert(rcdev, id); ++ if (ret) ++ return ret; ++ ++ return 0; ++} ++ + static int reset_simple_status(struct reset_controller_dev *rcdev, + unsigned long id) + { +@@ -80,6 +103,7 @@ static int reset_simple_status(struct re + const struct reset_control_ops reset_simple_ops = { + .assert = reset_simple_assert, + .deassert = reset_simple_deassert, ++ .reset = reset_simple_reset, + .status = reset_simple_status, + }; + EXPORT_SYMBOL_GPL(reset_simple_ops); +--- a/include/linux/reset/reset-simple.h ++++ b/include/linux/reset/reset-simple.h +@@ -27,6 +27,11 @@ + * @status_active_low: if true, bits read back as cleared while the reset is + * asserted. Otherwise, bits read back as set while the + * reset is asserted. ++ * @reset_us: Minimum delay in microseconds needed that needs to be ++ * waited for between an assert and a deassert to reset the ++ * device. If multiple consumers with different delay ++ * requirements are connected to this controller, it must ++ * be the largest minimum delay. + */ + struct reset_simple_data { + spinlock_t lock; +@@ -34,6 +39,7 @@ struct reset_simple_data { + struct reset_controller_dev rcdev; + bool active_low; + bool status_active_low; ++ unsigned int reset_us; + }; + + extern const struct reset_control_ops reset_simple_ops; -- cgit v1.2.3