From: Detlev Casanova <detlev.casanova@collabora.com>
To: Dragan Simic <dsimic@manjaro.org>
Cc: linux-kernel@vger.kernel.org,
Ulf Hansson <ulf.hansson@linaro.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Heiko Stuebner <heiko@sntech.de>,
Jaehoon Chung <jh80.chung@samsung.com>,
linux-mmc@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infradead.org, kernel@collabora.com,
Shawn Lin <shawn.lin@rock-chips.com>
Subject: Re: [PATCH v4 2/4] mmc: dw_mmc-rockchip: Add internal phase support
Date: Mon, 26 Aug 2024 14:44:36 -0400 [thread overview]
Message-ID: <1999169.usQuhbGJ8B@bootstrap> (raw)
In-Reply-To: <b57017bca1a4a5fe558556142a9cec3d@manjaro.org>
On Monday, 26 August 2024 10:39:58 EDT Dragan Simic wrote:
> Hello Detlev,
>
> On 2024-08-23 15:34, Detlev Casanova wrote:
> > On Friday, 23 August 2024 01:41:44 EDT Dragan Simic wrote:
> >> Hello Detlev,
> >>
> >> Please see a comment below.
> >>
> >> On 2024-08-22 23:15, Detlev Casanova wrote:
> >> > From: Shawn Lin <shawn.lin@rock-chips.com>
> >> >
> >> > Some Rockchip devices put the phase settings into the dw_mmc
> >> > controller.
> >> >
> >> > When the feature is present, the ciu-drive and ciu-sample clocks are
> >> > not used and the phase configuration is done directly through the mmc
> >> > controller.
> >> >
> >> > Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
> >> > Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
> >> > Acked-by: Shawn Lin <shawn.lin@rock-chips.com>
> >> > ---
> >> >
> >> > drivers/mmc/host/dw_mmc-rockchip.c | 171 +++++++++++++++++++++++++++--
> >> > 1 file changed, 160 insertions(+), 11 deletions(-)
> >> >
> >> > diff --git a/drivers/mmc/host/dw_mmc-rockchip.c
> >> > b/drivers/mmc/host/dw_mmc-rockchip.c
> >> > index b07190ba4b7a..2748f9bf2691 100644
> >> > --- a/drivers/mmc/host/dw_mmc-rockchip.c
> >> > +++ b/drivers/mmc/host/dw_mmc-rockchip.c
> >> > @@ -15,7 +15,17 @@
> >> >
> >> > #include "dw_mmc.h"
> >> > #include "dw_mmc-pltfm.h"
> >> >
> >> > -#define RK3288_CLKGEN_DIV 2
> >> > +#define RK3288_CLKGEN_DIV 2
> >> > +#define SDMMC_TIMING_CON0 0x130
> >> > +#define SDMMC_TIMING_CON1 0x134
> >> > +#define ROCKCHIP_MMC_DELAY_SEL BIT(10)
> >> > +#define ROCKCHIP_MMC_DEGREE_MASK 0x3
> >> > +#define ROCKCHIP_MMC_DEGREE_OFFSET 1
> >> > +#define ROCKCHIP_MMC_DELAYNUM_OFFSET 2
> >> > +#define ROCKCHIP_MMC_DELAYNUM_MASK (0xff <<
> >> > ROCKCHIP_MMC_DELAYNUM_OFFSET)
> >> > +#define ROCKCHIP_MMC_DELAY_ELEMENT_PSEC 60
> >> > +#define HIWORD_UPDATE(val, mask, shift) \
> >> > + ((val) << (shift) | (mask) << ((shift) + 16))
> >> >
> >> > static const unsigned int freqs[] = { 100000, 200000, 300000, 400000
> >> >
> >> > };
> >> >
> >> > @@ -24,8 +34,143 @@ struct dw_mci_rockchip_priv_data {
> >> >
> >> > struct clk *sample_clk;
> >> > int default_sample_phase;
> >> > int num_phases;
> >> >
> >> > + int internal_phase;
> >> >
> >> > };
> >>
> >> It might be good to declare internal_phase as "unsigned int
> >> internal_phase:1",
> >> i.e. as a bit field, which isn't going to save some memory in this
> >> particular
> >> case, but it would show additional attention to detail.
> >
> > In that case, I would go with a bool instead of int, that makes things
> > even clearer.
>
> My suggestion to use "unsigned int internal_phase:1" actually takes
> inspiration from the ASoC code, in which such bit fields are used
> quite a lot, even when using them actually doesn't save space.
>
> In this particular case, using plain bool would make sense, but I
> still think that using an "unsigned int internal_phase:1" bit field
> would fit better, because it would show the intention to possibly
> save a bit of RAM at some point. OTOH, I don't think that using
> bool with such bit fields would actually work cleanly, because bool
> actually resolves to int that's a signed type.
I wouldn't use bool with a bit field of course. I've always considered using
bit fileds only for structs that must have a certain format, like a header
format definition.
For me, it is better to use "bool internal_phase" so that it is obvious that
the feature can be on or off when reading the code.
When using bit fields with a struct that is not marked as "__packed", I
immediately think that there could be a bug there and wonder why the bit field
is used, not really thinking "the dev wanted to show they cared about memory
usage".
But I guess that is all about preferences. In the end, it won't change how it
works.
Detlev.
WARNING: multiple messages have this Message-ID (diff)
From: Detlev Casanova <detlev.casanova@collabora.com>
To: Dragan Simic <dsimic@manjaro.org>
Cc: linux-kernel@vger.kernel.org,
Ulf Hansson <ulf.hansson@linaro.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Heiko Stuebner <heiko@sntech.de>,
Jaehoon Chung <jh80.chung@samsung.com>,
linux-mmc@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infradead.org, kernel@collabora.com,
Shawn Lin <shawn.lin@rock-chips.com>
Subject: Re: [PATCH v4 2/4] mmc: dw_mmc-rockchip: Add internal phase support
Date: Mon, 26 Aug 2024 14:44:36 -0400 [thread overview]
Message-ID: <1999169.usQuhbGJ8B@bootstrap> (raw)
In-Reply-To: <b57017bca1a4a5fe558556142a9cec3d@manjaro.org>
On Monday, 26 August 2024 10:39:58 EDT Dragan Simic wrote:
> Hello Detlev,
>
> On 2024-08-23 15:34, Detlev Casanova wrote:
> > On Friday, 23 August 2024 01:41:44 EDT Dragan Simic wrote:
> >> Hello Detlev,
> >>
> >> Please see a comment below.
> >>
> >> On 2024-08-22 23:15, Detlev Casanova wrote:
> >> > From: Shawn Lin <shawn.lin@rock-chips.com>
> >> >
> >> > Some Rockchip devices put the phase settings into the dw_mmc
> >> > controller.
> >> >
> >> > When the feature is present, the ciu-drive and ciu-sample clocks are
> >> > not used and the phase configuration is done directly through the mmc
> >> > controller.
> >> >
> >> > Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
> >> > Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
> >> > Acked-by: Shawn Lin <shawn.lin@rock-chips.com>
> >> > ---
> >> >
> >> > drivers/mmc/host/dw_mmc-rockchip.c | 171 +++++++++++++++++++++++++++--
> >> > 1 file changed, 160 insertions(+), 11 deletions(-)
> >> >
> >> > diff --git a/drivers/mmc/host/dw_mmc-rockchip.c
> >> > b/drivers/mmc/host/dw_mmc-rockchip.c
> >> > index b07190ba4b7a..2748f9bf2691 100644
> >> > --- a/drivers/mmc/host/dw_mmc-rockchip.c
> >> > +++ b/drivers/mmc/host/dw_mmc-rockchip.c
> >> > @@ -15,7 +15,17 @@
> >> >
> >> > #include "dw_mmc.h"
> >> > #include "dw_mmc-pltfm.h"
> >> >
> >> > -#define RK3288_CLKGEN_DIV 2
> >> > +#define RK3288_CLKGEN_DIV 2
> >> > +#define SDMMC_TIMING_CON0 0x130
> >> > +#define SDMMC_TIMING_CON1 0x134
> >> > +#define ROCKCHIP_MMC_DELAY_SEL BIT(10)
> >> > +#define ROCKCHIP_MMC_DEGREE_MASK 0x3
> >> > +#define ROCKCHIP_MMC_DEGREE_OFFSET 1
> >> > +#define ROCKCHIP_MMC_DELAYNUM_OFFSET 2
> >> > +#define ROCKCHIP_MMC_DELAYNUM_MASK (0xff <<
> >> > ROCKCHIP_MMC_DELAYNUM_OFFSET)
> >> > +#define ROCKCHIP_MMC_DELAY_ELEMENT_PSEC 60
> >> > +#define HIWORD_UPDATE(val, mask, shift) \
> >> > + ((val) << (shift) | (mask) << ((shift) + 16))
> >> >
> >> > static const unsigned int freqs[] = { 100000, 200000, 300000, 400000
> >> >
> >> > };
> >> >
> >> > @@ -24,8 +34,143 @@ struct dw_mci_rockchip_priv_data {
> >> >
> >> > struct clk *sample_clk;
> >> > int default_sample_phase;
> >> > int num_phases;
> >> >
> >> > + int internal_phase;
> >> >
> >> > };
> >>
> >> It might be good to declare internal_phase as "unsigned int
> >> internal_phase:1",
> >> i.e. as a bit field, which isn't going to save some memory in this
> >> particular
> >> case, but it would show additional attention to detail.
> >
> > In that case, I would go with a bool instead of int, that makes things
> > even clearer.
>
> My suggestion to use "unsigned int internal_phase:1" actually takes
> inspiration from the ASoC code, in which such bit fields are used
> quite a lot, even when using them actually doesn't save space.
>
> In this particular case, using plain bool would make sense, but I
> still think that using an "unsigned int internal_phase:1" bit field
> would fit better, because it would show the intention to possibly
> save a bit of RAM at some point. OTOH, I don't think that using
> bool with such bit fields would actually work cleanly, because bool
> actually resolves to int that's a signed type.
I wouldn't use bool with a bit field of course. I've always considered using
bit fileds only for structs that must have a certain format, like a header
format definition.
For me, it is better to use "bool internal_phase" so that it is obvious that
the feature can be on or off when reading the code.
When using bit fields with a struct that is not marked as "__packed", I
immediately think that there could be a bug there and wonder why the bit field
is used, not really thinking "the dev wanted to show they cared about memory
usage".
But I guess that is all about preferences. In the end, it won't change how it
works.
Detlev.
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
next prev parent reply other threads:[~2024-08-26 18:45 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-22 21:15 [PATCH v4 0/4] Add dw_mmc support for rk3576 Detlev Casanova
2024-08-22 21:15 ` Detlev Casanova
2024-08-22 21:15 ` [PATCH v4 1/4] dt-bindings: mmc: Add support for rk3576 dw-mshc Detlev Casanova
2024-08-22 21:15 ` Detlev Casanova
2024-08-23 7:36 ` Krzysztof Kozlowski
2024-08-23 7:36 ` Krzysztof Kozlowski
2024-08-22 21:15 ` [PATCH v4 2/4] mmc: dw_mmc-rockchip: Add internal phase support Detlev Casanova
2024-08-22 21:15 ` Detlev Casanova
2024-08-23 5:41 ` Dragan Simic
2024-08-23 5:41 ` Dragan Simic
2024-08-23 13:34 ` Detlev Casanova
2024-08-23 13:34 ` Detlev Casanova
2024-08-26 14:39 ` Dragan Simic
2024-08-26 14:39 ` Dragan Simic
2024-08-26 18:44 ` Detlev Casanova [this message]
2024-08-26 18:44 ` Detlev Casanova
2024-08-22 21:15 ` [PATCH v4 3/4] mmc: dw_mmc-rockchip: Skip all phases bigger than 270 degrees Detlev Casanova
2024-08-22 21:15 ` Detlev Casanova
2024-08-23 5:45 ` Dragan Simic
2024-08-23 5:45 ` Dragan Simic
2024-08-23 13:59 ` Detlev Casanova
2024-08-23 13:59 ` Detlev Casanova
2024-08-26 14:52 ` Dragan Simic
2024-08-26 14:52 ` Dragan Simic
2024-08-22 21:15 ` [PATCH v4 4/4] mmc: dw_mmc-rockchip: Add support for rk3576 SoCs Detlev Casanova
2024-08-22 21:15 ` Detlev Casanova
2024-08-23 7:00 ` Dragan Simic
2024-08-23 7:00 ` Dragan Simic
2024-08-23 13:20 ` Detlev Casanova
2024-08-23 13:20 ` Detlev Casanova
2024-08-26 14:07 ` Dragan Simic
2024-08-26 14:07 ` Dragan Simic
2024-08-26 15:45 ` Detlev Casanova
2024-08-26 15:45 ` Detlev Casanova
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=1999169.usQuhbGJ8B@bootstrap \
--to=detlev.casanova@collabora.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dsimic@manjaro.org \
--cc=heiko@sntech.de \
--cc=jh80.chung@samsung.com \
--cc=kernel@collabora.com \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=robh@kernel.org \
--cc=shawn.lin@rock-chips.com \
--cc=ulf.hansson@linaro.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.