From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
To: Krishna Kurapati <quic_kriskura@quicinc.com>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Rob Herring <robh+dt@kernel.org>, Andy Gross <agross@kernel.org>,
Bjorn Andersson <bjorn.andersson@linaro.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Stephen Boyd <swboyd@chromium.org>,
Doug Anderson <dianders@chromium.org>,
Matthias Kaehlcke <mka@chromium.org>,
Wesley Cheng <quic_wcheng@quicinc.com>
Cc: devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-phy@lists.infradead.org, quic_pkondeti@quicinc.com,
quic_ppratap@quicinc.com, quic_vpulyala@quicinc.com
Subject: Re: [PATCH v8 2/3] phy: qcom-snps: Add support for overriding phy tuning parameters
Date: Wed, 8 Jun 2022 11:46:03 +0200 [thread overview]
Message-ID: <97d63ed3-ec95-5a2e-edab-01af687c1d34@linaro.org> (raw)
In-Reply-To: <1654066564-20518-3-git-send-email-quic_kriskura@quicinc.com>
On 01/06/2022 08:56, Krishna Kurapati wrote:
> Add support for overriding electrical signal tuning parameters for
> SNPS HS Phy.
>
> Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
> Reviewed-by: Pavankumar Kondeti <quic_pkondeti@quicinc.com>
> ---
> drivers/phy/qualcomm/phy-qcom-snps-femto-v2.c | 267 +++++++++++++++++++++++++-
> 1 file changed, 265 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-snps-femto-v2.c b/drivers/phy/qualcomm/phy-qcom-snps-femto-v2.c
> index 5d20378..14bbb06 100644
> --- a/drivers/phy/qualcomm/phy-qcom-snps-femto-v2.c
> +++ b/drivers/phy/qualcomm/phy-qcom-snps-femto-v2.c
> @@ -52,6 +52,12 @@
> #define USB2_SUSPEND_N BIT(2)
> #define USB2_SUSPEND_N_SEL BIT(3)
>
> +#define USB2_PHY_USB_PHY_HS_PHY_OVERRIDE_X0 (0x6c)
> +#define USB2_PHY_USB_PHY_HS_PHY_OVERRIDE_X1 (0x70)
> +#define USB2_PHY_USB_PHY_HS_PHY_OVERRIDE_X2 (0x74)
> +#define USB2_PHY_USB_PHY_HS_PHY_OVERRIDE_X3 (0x78)
> +#define PARAM_OVRD_MASK 0xFF
> +
> #define USB2_PHY_USB_PHY_CFG0 (0x94)
> #define UTMI_PHY_DATAPATH_CTRL_OVERRIDE_EN BIT(0)
> #define UTMI_PHY_CMN_CTRL_OVERRIDE_EN BIT(1)
> @@ -60,12 +66,76 @@
> #define REFCLK_SEL_MASK GENMASK(1, 0)
> #define REFCLK_SEL_DEFAULT (0x2 << 0)
>
> +#define HS_DISCONNECT_MASK GENMASK(2, 0)
> +
> +#define SQUELCH_DETECTOR_MASK GENMASK(7, 5)
> +
I wonder why do you have here blank lines after every define. Are these
bits from different registers?
> +#define HS_AMPLITUDE_MASK GENMASK(3, 0)
> +
> +#define PREEMPHASIS_DURATION_MASK BIT(5)
> +
> +#define PREEMPHASIS_AMPLITUDE_MASK GENMASK(7, 6)
These two look like from same register...
> +
> +#define HS_RISE_FALL_MASK GENMASK(1, 0)
> +
> +#define HS_CROSSOVER_VOLTAGE_MASK GENMASK(3, 2)
> +
> +#define HS_OUTPUT_IMPEDANCE_MASK GENMASK(5, 4)
The same
> +
> +#define LS_FS_OUTPUT_IMPEDANCE_MASK GENMASK(3, 0)
> +
> +
> static const char * const qcom_snps_hsphy_vreg_names[] = {
> "vdda-pll", "vdda33", "vdda18",
> };
>
> #define SNPS_HS_NUM_VREGS ARRAY_SIZE(qcom_snps_hsphy_vreg_names)
>
> +struct override_param {
> + s32 value;
> + u8 reg;
> +};
> +
> +#define OVERRIDE_PARAM(bps, val)\
> +{ \
> + .value = bps, \
> + .reg = val, \
> +}
> +
> +struct override_param_map {
> + struct override_param *param_table;
> + u8 table_size;
> + u8 reg_offset;
> + u8 param_mask;
> +};
> +
> +#define OVERRIDE_PARAM_MAP(table, num_elements, offset, mask) \
> +{ \
> + .param_table = table, \
> + .table_size = num_elements, \
> + .reg_offset = offset, \
> + .param_mask = mask, \
> +}
> +
> +struct phy_override_seq {
> + bool need_update;
> + u8 offset;
> + u8 value;
> + u8 mask;
> +};
> +
> +static const char *phy_seq_props[] = {
static const char * const
> + "qcom,hs-disconnect-bp",
> + "qcom,squelch-detector-bp",
> + "qcom,hs-amplitude-bp",
> + "qcom,pre-emphasis-duration-bp",
> + "qcom,pre-emphasis-amplitude-bp",
> + "qcom,hs-rise-fall-time-bp",
> + "qcom,hs-crossover-voltage-microvolt",
> + "qcom,hs-output-impedance-micro-ohms",
> + "qcom,ls-fs-output-impedance-bp",
> +};
> +
> /**
> * struct qcom_snps_hsphy - snps hs phy attributes
> *
> @@ -91,6 +161,7 @@ struct qcom_snps_hsphy {
>
> bool phy_initialized;
> enum phy_mode mode;
> + struct phy_override_seq update_seq_cfg[ARRAY_SIZE(phy_seq_props)];
> };
>
> static inline void qcom_snps_hsphy_write_mask(void __iomem *base, u32 offset,
> @@ -173,10 +244,147 @@ static int qcom_snps_hsphy_set_mode(struct phy *phy, enum phy_mode mode,
> return 0;
> }
>
> +static struct override_param hs_disconnect_sc7280[] = {
This should be const. I see you are using it in non-const way and this
makes me wonder why... You just need to store the value from the DT and
program it (after converting the units). Why modifying static driver
data? What if you have two phy drivers? Which data is being used?
IOW, all these tables should be const and you could store the final
value in 'struct qcom_snps_hsphy'. Then just program to registers this
final value.
Best regards,
Krzysztof
next prev parent reply other threads:[~2022-06-08 10:04 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-01 6:56 [PATCH v8 0/3] Add QCOM SNPS PHY overriding params support Krishna Kurapati
2022-06-01 6:56 ` [PATCH v8 1/3] dt-bindings: phy: qcom,usb-snps-femto-v2: Add phy override params bindings Krishna Kurapati
2022-06-01 12:28 ` Rob Herring
2022-06-01 17:33 ` Rob Herring
2022-06-01 17:36 ` Krishna Kurapati PSSNV
2022-06-08 9:30 ` Krishna Kurapati PSSNV
2022-06-08 9:38 ` Krzysztof Kozlowski
2022-06-08 9:36 ` Krzysztof Kozlowski
2022-06-08 11:03 ` Krishna Kurapati PSSNV
2022-06-08 12:07 ` Krishna Kurapati PSSNV
2022-06-08 15:53 ` Vinod Koul
2022-06-08 16:14 ` Krishna Kurapati PSSNV
2022-06-01 6:56 ` [PATCH v8 2/3] phy: qcom-snps: Add support for overriding phy tuning parameters Krishna Kurapati
2022-06-08 9:46 ` Krzysztof Kozlowski [this message]
2022-06-08 16:04 ` Vinod Koul
[not found] ` <295d0748-d817-2afa-19d2-5e802ad7fec0@quicinc.com>
2022-06-17 0:29 ` Vinod Koul
2022-06-01 6:56 ` [PATCH v8 3/3] arm64: dts: qcom: sc7280: Update SNPS Phy params for SC7280 IDP device Krishna Kurapati
2022-06-08 9:36 ` Krzysztof Kozlowski
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=97d63ed3-ec95-5a2e-edab-01af687c1d34@linaro.org \
--to=krzysztof.kozlowski@linaro.org \
--cc=agross@kernel.org \
--cc=bjorn.andersson@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=dianders@chromium.org \
--cc=gregkh@linuxfoundation.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=linux-usb@vger.kernel.org \
--cc=mka@chromium.org \
--cc=quic_kriskura@quicinc.com \
--cc=quic_pkondeti@quicinc.com \
--cc=quic_ppratap@quicinc.com \
--cc=quic_vpulyala@quicinc.com \
--cc=quic_wcheng@quicinc.com \
--cc=robh+dt@kernel.org \
--cc=swboyd@chromium.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;
as well as URLs for NNTP newsgroup(s).