1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- From 813ba3e427671ba3ff35c825087b03f0ad91cf02 Mon Sep 17 00:00:00 2001
- From: Robert Marko <[email protected]>
- Date: Mon, 7 Nov 2022 14:28:59 +0100
- Subject: [PATCH] clk: qcom: reset: support resetting multiple bits
- This patch adds the support for giving the complete bitmask
- in reset structure and reset operation will use this bitmask
- for all reset operations.
- Currently, reset structure only takes a single bit for each reset
- and then calculates the bitmask by using the BIT() macro.
- However, this is not sufficient anymore for newer SoC-s like IPQ8074,
- IPQ6018 and more, since their networking resets require multiple bits
- to be asserted in order to properly reset the HW block completely.
- So, in order to allow asserting multiple bits add "bitmask" field to
- qcom_reset_map, and then use that bitmask value if its populated in the
- driver, if its not populated, then we just default to existing behaviour
- and calculate the bitmask on the fly.
- Signed-off-by: Robert Marko <[email protected]>
- Signed-off-by: Bjorn Andersson <[email protected]>
- Link: https://lore.kernel.org/r/[email protected]
- ---
- drivers/clk/qcom/reset.c | 4 ++--
- drivers/clk/qcom/reset.h | 1 +
- 2 files changed, 3 insertions(+), 2 deletions(-)
- --- a/drivers/clk/qcom/reset.c
- +++ b/drivers/clk/qcom/reset.c
- @@ -30,7 +30,7 @@ qcom_reset_assert(struct reset_controlle
-
- rst = to_qcom_reset_controller(rcdev);
- map = &rst->reset_map[id];
- - mask = BIT(map->bit);
- + mask = map->bitmask ? map->bitmask : BIT(map->bit);
-
- return regmap_update_bits(rst->regmap, map->reg, mask, mask);
- }
- @@ -44,7 +44,7 @@ qcom_reset_deassert(struct reset_control
-
- rst = to_qcom_reset_controller(rcdev);
- map = &rst->reset_map[id];
- - mask = BIT(map->bit);
- + mask = map->bitmask ? map->bitmask : BIT(map->bit);
-
- return regmap_update_bits(rst->regmap, map->reg, mask, 0);
- }
- --- a/drivers/clk/qcom/reset.h
- +++ b/drivers/clk/qcom/reset.h
- @@ -12,6 +12,7 @@ struct qcom_reset_map {
- unsigned int reg;
- u8 bit;
- u8 udelay;
- + u32 bitmask;
- };
-
- struct regmap;
|