From: Tony Lindgren <tony@atomide.com>
To: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl>
Cc: Jarkko Nikula <jhnikula@gmail.com>, linux-omap@vger.kernel.org
Subject: Re: [PATCH 3/4 v4] OMAP: McBSP: Introduce caching in register write operations
Date: Thu, 3 Dec 2009 12:03:02 -0800 [thread overview]
Message-ID: <20091203200301.GB4348@atomide.com> (raw)
In-Reply-To: <200912031330.43464.jkrzyszt@tis.icnet.pl>
Hi,
* Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> [091203 04:29]:
> Reserve space inside omap_mcbsp structure for storing cached copies of McBSP
> register values.
> Modify the MCBSP_WRITE() macro to update the cache with every register write
> operation.
> Introduce a new macro that reads from the cache instead of hardware.
>
> Applies on top of patch 2 from this series:
> [PATCH v3 2/4] OMAP: McBSP: Prepare register read/write macros API for caching
>
> Tested on OMAP1510 based Amstrad Delta using linux-omap for-next,
> commit 4421752e331cfb1d942b47ffdb26e451a8da58a0.
> Compile-tested with omap_3430sdp_defconfig.
>
> Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl>
>
> ---
> Thursday 03 December 2009 08:49:21 Jarkko Nikula wrote:
> > On Tue, 1 Dec 2009 04:15:50 +0100
> > Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> wrote:
> > > #define MCBSP_WRITE(mcbsp, reg, val) \
> > > - omap_mcbsp_write(mcbsp->io_base, OMAP_MCBSP_REG_##reg, val)
> > > + omap_mcbsp_write(mcbsp->io_base, OMAP_MCBSP_REG_##reg, \
> > > + mcbsp->reg_cache[OMAP_MCBSP_REG_##reg / OMAP_MCBSP_REG_DRR1] \
> > > + = val)
> > > +#define MCBSP_READ_CACHE(mcbsp, reg) \
> > > + (mcbsp->reg_cache[OMAP_MCBSP_REG_##reg / OMAP_MCBSP_REG_DRR1])
> >
> > These divisions by DDR1 are confusing. Use rather sizeof:
> >
> > reg_cache[OMAP_MCBSP_REG_##reg / sizeof(*mcbsp->reg_cache)]
>
> Done.
>
> Jarkko, many thanks for your cooperation :).
>
> Janusz
>
> arch/arm/plat-omap/include/plat/mcbsp.h | 5 +++++
> arch/arm/plat-omap/mcbsp.c | 7 ++++++-
> 2 files changed, 11 insertions(+), 1 deletion(-)
>
> --- git/arch/arm/plat-omap/include/plat/mcbsp.h.orig 2009-11-27 11:53:45.000000000 +0100
> +++ git/arch/arm/plat-omap/include/plat/mcbsp.h 2009-12-01 03:37:21.000000000 +0100
> @@ -415,6 +415,11 @@ struct omap_mcbsp {
> u16 max_tx_thres;
> u16 max_rx_thres;
> #endif
> +#ifdef CONFIG_ARCH_OMAP1
> + u16 reg_cache[OMAP_MCBSP_REG_XCERH / sizeof(u16) + 1];
> +#else
> + u32 reg_cache[OMAP_MCBSP_REG_RCCR / sizeof(u32) + 1];
> +#endif
> };
> extern struct omap_mcbsp **mcbsp_ptr;
> extern int omap_mcbsp_count;
How about rather set:
static u16 omap1_reg_cache[];
and
static u32 omap2_reg_cache[];
> --- git/arch/arm/plat-omap/mcbsp.c.orig 2009-12-01 03:19:56.000000000 +0100
> +++ git/arch/arm/plat-omap/mcbsp.c 2009-12-03 11:37:21.000000000 +0100
> @@ -49,7 +49,12 @@ int omap_mcbsp_read(void __iomem *io_bas
> #define MCBSP_READ(mcbsp, reg) \
> omap_mcbsp_read(mcbsp->io_base, OMAP_MCBSP_REG_##reg)
> #define MCBSP_WRITE(mcbsp, reg, val) \
> - omap_mcbsp_write(mcbsp->io_base, OMAP_MCBSP_REG_##reg, val)
> + omap_mcbsp_write(mcbsp->io_base, OMAP_MCBSP_REG_##reg, \
> + mcbsp->reg_cache[OMAP_MCBSP_REG_##reg / \
> + sizeof(*mcbsp->reg_cache)] = val)
> +#define MCBSP_READ_CACHE(mcbsp, reg) \
> + (mcbsp->reg_cache[OMAP_MCBSP_REG_##reg / \
> + sizeof(*mcbsp->reg_cache)])
>
> #define omap_mcbsp_check_valid_id(id) (id < omap_mcbsp_count)
> #define id_to_mcbsp_ptr(id) mcbsp_ptr[id];
Then rather than doing this cache manipulation in the macro, just
do it in the omap_mcbsp_read/write functions based on the
cpu_class_is_omap1() accessing omap1_reg_cache or omap2_reg_cache.
This way you can get rid of the ifdef else.
Regards,
Tony
next prev parent reply other threads:[~2009-12-03 20:03 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-01 3:10 [PATCH v3 0/4] OMAP: McBSP: Use register cache Janusz Krzysztofik
2009-12-01 3:12 ` [PATCH v3 1/4] OMAP: McBSP: Use macros for all register read/write operations Janusz Krzysztofik
2009-12-01 3:26 ` [Resend] " Janusz Krzysztofik
2009-12-01 3:14 ` [PATCH v3 2/4] OMAP: McBSP: Prepare register read/write macros API for caching Janusz Krzysztofik
2009-12-01 3:15 ` [PATCH v3 3/4] OMAP: McBSP: Introduce caching in register write operations Janusz Krzysztofik
2009-12-03 7:49 ` Jarkko Nikula
2009-12-03 12:30 ` [PATCH 3/4 v4] " Janusz Krzysztofik
2009-12-03 20:03 ` Tony Lindgren [this message]
2009-12-03 23:18 ` Janusz Krzysztofik
2009-12-04 12:57 ` Janusz Krzysztofik
2009-12-04 19:17 ` Tony Lindgren
2009-12-05 13:46 ` [PATCH 3/4 v5a] " Janusz Krzysztofik
2009-12-05 13:47 ` [RFC][RFT][PATCH 3/4 v5b] " Janusz Krzysztofik
2009-12-07 17:55 ` Tony Lindgren
2009-12-07 19:39 ` Janusz Krzysztofik
2009-12-07 21:06 ` Tony Lindgren
2009-12-08 7:35 ` Jarkko Nikula
2009-12-08 16:07 ` [RFC][RFT][PATCH 3/4 v6] " Janusz Krzysztofik
2009-12-08 16:40 ` Tony Lindgren
2009-12-08 16:59 ` Tony Lindgren
2009-12-08 19:46 ` Janusz Krzysztofik
2009-12-08 23:32 ` Tony Lindgren
2009-12-08 23:39 ` Tony Lindgren
2009-12-01 3:17 ` [PATCH v3 4/4] OMAP: McBSP: Use cache when modifying individual register bits Janusz Krzysztofik
2009-12-03 12:31 ` [PATCH 4/4 v4] " Janusz Krzysztofik
2009-12-03 7:49 ` [PATCH v3 0/4] OMAP: McBSP: Use register cache Jarkko Nikula
2009-12-03 9:35 ` Peter Ujfalusi
2009-12-03 12:31 ` Janusz Krzysztofik
2009-12-04 6:58 ` Peter Ujfalusi
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=20091203200301.GB4348@atomide.com \
--to=tony@atomide.com \
--cc=jhnikula@gmail.com \
--cc=jkrzyszt@tis.icnet.pl \
--cc=linux-omap@vger.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 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.