From: Neil Armstrong <neil.armstrong@linaro.org>
To: Konrad Dybcio <konrad.dybcio@linaro.org>,
Rob Herring <robh+dt@kernel.org>, Andy Gross <agross@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Bjorn Andersson <andersson@kernel.org>
Cc: linux-i2c@vger.kernel.org, linux-arm-msm@vger.kernel.org,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH 3/6] soc: qcom: geni-se: add desc struct to specify clocks from device match data
Date: Thu, 17 Nov 2022 08:58:22 +0100 [thread overview]
Message-ID: <ddb4cb6b-538e-0c56-679d-7ec7fdf5d041@linaro.org> (raw)
In-Reply-To: <16d6c50b-f7da-a2b3-0b95-726b843e50c0@linaro.org>
On 16/11/2022 11:32, Konrad Dybcio wrote:
>
>
> On 16/11/2022 11:21, Neil Armstrong wrote:
>> The I2C Master Hub is a stripped down version of the GENI Serial Engine
>> QUP Wrapper Controller but only supporting I2C serial engines without
>> DMA support.
>>
>> This prepares support for the I2C Master Hub variant, by moving
>> the required clocks list to a new desc struct then passing it through the
>> compatible match data.
>>
>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
>> ---
>> drivers/soc/qcom/qcom-geni-se.c | 57 +++++++++++++++++++++++++++++++----------
>> 1 file changed, 43 insertions(+), 14 deletions(-)
>>
>> diff --git a/drivers/soc/qcom/qcom-geni-se.c b/drivers/soc/qcom/qcom-geni-se.c
>> index a0ceeede450f..f4f54d92a01a 100644
>> --- a/drivers/soc/qcom/qcom-geni-se.c
>> +++ b/drivers/soc/qcom/qcom-geni-se.c
>> @@ -81,19 +81,31 @@
>> */
>> #define MAX_CLK_PERF_LEVEL 32
>> -#define NUM_AHB_CLKS 2
>> +#define MAX_CLKS 2
>> /**
>> * struct geni_wrapper - Data structure to represent the QUP Wrapper Core
>> * @dev: Device pointer of the QUP wrapper core
>> * @base: Base address of this instance of QUP wrapper core
>> - * @ahb_clks: Handle to the primary & secondary AHB clocks
>> + * @clks: Handle to the primary & optional secondary AHB clocks
>> + * @num_clks: Count of clocks
>> * @to_core: Core ICC path
>> */
>> struct geni_wrapper {
>> struct device *dev;
>> void __iomem *base;
>> - struct clk_bulk_data ahb_clks[NUM_AHB_CLKS];
>> + struct clk_bulk_data clks[MAX_CLKS];
>> + unsigned int num_clks;
>> +};
>> +
>> +/**
>> + * struct geni_se_desc - Data structure to represent the QUP Wrapper resources
>> + * @clks: Name of the primary & optional secondary AHB clocks
>> + * @num_clks: Count of clock names
>> + */
>> +struct geni_se_desc {
>> + unsigned int num_clks;
>> + const char * const *clks;
>> };
>> static const char * const icc_path_names[] = {"qup-core", "qup-config",
>> @@ -496,8 +508,7 @@ static void geni_se_clks_off(struct geni_se *se)
>> struct geni_wrapper *wrapper = se->wrapper;
>> clk_disable_unprepare(se->clk);
>> - clk_bulk_disable_unprepare(ARRAY_SIZE(wrapper->ahb_clks),
>> - wrapper->ahb_clks);
>> + clk_bulk_disable_unprepare(wrapper->num_clks, wrapper->clks);
>> }
>> /**
>> @@ -528,15 +539,13 @@ static int geni_se_clks_on(struct geni_se *se)
>> int ret;
>> struct geni_wrapper *wrapper = se->wrapper;
>> - ret = clk_bulk_prepare_enable(ARRAY_SIZE(wrapper->ahb_clks),
>> - wrapper->ahb_clks);
>> + ret = clk_bulk_prepare_enable(wrapper->num_clks, wrapper->clks);
>> if (ret)
>> return ret;
>> ret = clk_prepare_enable(se->clk);
>> if (ret)
>> - clk_bulk_disable_unprepare(ARRAY_SIZE(wrapper->ahb_clks),
>> - wrapper->ahb_clks);
>> + clk_bulk_disable_unprepare(wrapper->num_clks, wrapper->clks);
>> return ret;
>> }
>> @@ -887,11 +896,21 @@ static int geni_se_probe(struct platform_device *pdev)
>> return PTR_ERR(wrapper->base);
>> if (!has_acpi_companion(&pdev->dev)) {
>> - wrapper->ahb_clks[0].id = "m-ahb";
>> - wrapper->ahb_clks[1].id = "s-ahb";
>> - ret = devm_clk_bulk_get(dev, NUM_AHB_CLKS, wrapper->ahb_clks);
>> + const struct geni_se_desc *desc;
>> + int i;
>> +
>> + desc = device_get_match_data(&pdev->dev);
>> + if (!desc)
>> + return -EINVAL;
>> +
>> + wrapper->num_clks = min_t(unsigned int, desc->num_clks, MAX_CLKS);
> Maybe a warning would be suitable if num mismatch happens?
Indeed, will add that, thx.
>
> Other than that,
> Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
>
>
> Konrad
>> +
>> + for (i = 0; i < wrapper->num_clks; ++i)
>> + wrapper->clks[i].id = desc->clks[i];
>> +
>> + ret = devm_clk_bulk_get(dev, wrapper->num_clks, wrapper->clks);
>> if (ret) {
>> - dev_err(dev, "Err getting AHB clks %d\n", ret);
>> + dev_err(dev, "Err getting clks %d\n", ret);
>> return ret;
>> }
>> }
>> @@ -901,8 +920,18 @@ static int geni_se_probe(struct platform_device *pdev)
>> return devm_of_platform_populate(dev);
>> }
>> +static const char * const qup_clks[] = {
>> + "m-ahb",
>> + "s-ahb",
>> +};
>> +
>> +static const struct geni_se_desc qup_desc = {
>> + .clks = qup_clks,
>> + .num_clks = ARRAY_SIZE(qup_clks),
>> +};
>> +
>> static const struct of_device_id geni_se_dt_match[] = {
>> - { .compatible = "qcom,geni-se-qup", },
>> + { .compatible = "qcom,geni-se-qup", .data = &qup_desc },
>> {}
>> };
>> MODULE_DEVICE_TABLE(of, geni_se_dt_match);
>>
next prev parent reply other threads:[~2022-11-17 7:58 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-16 10:21 [PATCH 0/6] soc: qcom: add support for the I2C Master Hub Neil Armstrong
2022-11-16 10:21 ` [PATCH 1/6] dt-bindings: qcom: geni-se: document I2C Master Hub wrapper variant Neil Armstrong
2022-11-17 14:43 ` Krzysztof Kozlowski
2022-11-16 10:21 ` [PATCH 2/6] dt-bindings: i2c: qcom-geni: document I2C Master Hub serial I2C engine Neil Armstrong
2022-11-17 14:44 ` Krzysztof Kozlowski
2022-11-16 10:21 ` [PATCH 3/6] soc: qcom: geni-se: add desc struct to specify clocks from device match data Neil Armstrong
2022-11-16 10:32 ` Konrad Dybcio
2022-11-17 7:58 ` Neil Armstrong [this message]
2022-11-16 10:21 ` [PATCH 4/6] soc: qcom: geni-se: add support for I2C Master Hub wrapper variant Neil Armstrong
2022-11-16 10:32 ` Konrad Dybcio
2022-11-16 10:21 ` [PATCH 5/6] i2c: qcom-geni: add desc struct to prepare support for I2C Master Hub variant Neil Armstrong
2022-11-16 10:38 ` Konrad Dybcio
2022-11-16 10:21 ` [PATCH 6/6] i2c: qcom-geni: add " Neil Armstrong
2022-11-16 10:38 ` Konrad Dybcio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ddb4cb6b-538e-0c56-679d-7ec7fdf5d041@linaro.org \
--to=neil.armstrong@linaro.org \
--cc=agross@kernel.org \
--cc=andersson@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=konrad.dybcio@linaro.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=robh+dt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox