From: Stefano Babic <sbabic@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] mx31: provide readable WEIM CS accessor
Date: Wed, 28 Sep 2011 17:14:49 +0200 [thread overview]
Message-ID: <4E8339E9.3080204@denx.de> (raw)
In-Reply-To: <1317214100-1379-2-git-send-email-helmut.raiger@hale.at>
On 09/28/2011 02:48 PM, Helmut Raiger wrote:
> Some macros are added to support the setup for i.MX31 WEIM
> chip selects. As a compromise between verbosity and readability
> an ASCII-art'ish bit comment is used instead of bitfields.
> All i.MX31 boards have been patched to use this approach using a helper
> program to verify the changes.
>
> Signed-off-by: Helmut Raiger <helmut.raiger@hale.at>
Hi Helmut,
> ---
> arch/arm/include/asm/arch-mx31/imx-regs.h | 38 ++++++++++++-
> board/davedenx/qong/qong.c | 79 +++++++++------------------
> board/freescale/mx31ads/mx31ads.c | 13 +++--
> board/freescale/mx31pdk/mx31pdk.c | 11 +++-
> board/imx31_phycore/imx31_phycore.c | 36 +++++++++---
> board/logicpd/imx31_litekit/imx31_litekit.c | 24 ++++++--
> 6 files changed, 123 insertions(+), 78 deletions(-)
>
> diff --git a/arch/arm/include/asm/arch-mx31/imx-regs.h b/arch/arm/include/asm/arch-mx31/imx-regs.h
> index 2064870..d535830 100644
> --- a/arch/arm/include/asm/arch-mx31/imx-regs.h
> +++ b/arch/arm/include/asm/arch-mx31/imx-regs.h
> @@ -25,6 +25,7 @@
> #define __ASM_ARCH_MX31_IMX_REGS_H
>
> #if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))
> +#include <asm/io.h>
> #include <asm/types.h>
>
> /* Clock control module registers */
> @@ -534,10 +535,41 @@ enum iomux_pins {
> #define ESDCTL_BL(x) ((x) << 7)
> #define ESDCTL_PRCT(x) ((x) << 0)
>
> +/* 13 fields of the upper CS control register */
> +#define CSCR_U(sp, wp, bcd, bcs, psz, pme, sync, dol, \
> + cnc, wsc, ew, wws, edc) \
> + ((sp) << 31 | (wp) << 30 | (bcd) << 28 | (psz) << 22 | (pme) << 21 |\
> + (sync) << 20 | (dol) << 16 | (cnc) << 14 | (wsc) << 8 | (ew) << 7 |\
> + (wws) << 4 | (edc) << 0)
> +/* 12 fields of the lower CS control register */
> +#define CSCR_L(oea, oen, ebwa, ebwn, \
> + csa, ebc, dsz, csn, psr, cre, wrap, csen) \
> + ((oea) << 28 | (oen) << 24 | (ebwa) << 20 | (ebwn) << 16 |\
> + (csa) << 12 | (ebc) << 11 | (dsz) << 8 | (csn) << 4 |\
> + (psr) << 3 | (cre) << 2 | (wrap) << 1 | (csen) << 0)
> +/* 14 fields of the additional CS control register */
> +#define CSCR_A(ebra, ebrn, rwa, rwn, mum, lah, lbn, lba, dww, dct, \
> + wwu, age, cnc2, fce) \
> + ((ebra) << 28 | (ebrn) << 24 | (rwa) << 20 | (rwn) << 16 |\
> + (mum) << 15 | (lah) << 13 | (lbn) << 10 | (lba) << 8 |\
> + (dww) << 6 | (dct) << 4 | (wwu) << 3 |\
> + (age) << 2 | (cnc2) << 1 | (fce) << 0)
> +
> #define WEIM_BASE 0xb8002000
> -#define CSCR_U(x) (WEIM_BASE + (x) * 0x10)
> -#define CSCR_L(x) (WEIM_BASE + 4 + (x) * 0x10)
> -#define CSCR_A(x) (WEIM_BASE + 8 + (x) * 0x10)
> +#define WEIM_CSCR_U(x) (WEIM_BASE + (x) * 0x10)
> +#define WEIM_CSCR_L(x) (WEIM_BASE + 4 + (x) * 0x10)
> +#define WEIM_CSCR_A(x) (WEIM_BASE + 8 + (x) * 0x10)
> +
> +#ifndef __ASSEMBLER__
> +static inline void mx31_setup_weimcs(int cs,
Is there a reason to embed this function in imx-regs.h ? Why not in
./arch/arm/cpu/arm1136/mx31/generic.c, where I think this function
belongs ?
We are trying to get consistency among the several i.MX SOCs. For this
reason, a general function should not have a specific SOC prefix.
You introduce now a new accessor to set up the WEIM registers. We have
not yet such as function, but we can have then for other SOCs, too.
Rename your function as mxc_setup_weimcs(), and when an accessor will be
supplied for MX5 (or MX*), the same name must be used.
> + unsigned int upper, unsigned int lower, unsigned int add)
> +{
> + writel(upper, WEIM_CSCR_U(cs));
> + writel(lower, WEIM_CSCR_L(cs));
> + writel(add, WEIM_CSCR_A(cs));
> +}
You are using offests to access registers. Why not to set a structure as:
struct weim_regs {
u32 upper;
u32 lower;
u32 adder;
u32 reserved;
}
and then :
struct weim {
struct weim_regs cs[6];
};
...or something like that.
Passing the register values to the function makes the accessor too
striclty bound to the mx31. But if you pass a struct weim*, that is void
mxc_setup_weimcs(struct weim *), we can have the same accessor (with a
different implementation, of course) for the other SOCs, too. I can
imagine we can have MX5 (at the moment I see only the mx53ard) using the
same way to set up the WEIM interface.
Best regards,
Stefano Babic
--
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================
next prev parent reply other threads:[~2011-09-28 15:14 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-22 12:12 [U-Boot] mx31: Add board support for HALE TT-01 Helmut Raiger
2011-09-22 12:12 ` [U-Boot] [PATCH 1/2] mx31: define pins and init for UART2 and CSPI3 Helmut Raiger
2011-09-22 12:12 ` [U-Boot] [PATCH 2/2] TT-01: add basic board support for HALE TT-01 Helmut Raiger
2011-09-22 13:36 ` Fabio Estevam
2011-09-22 13:51 ` Stefano Babic
2011-10-06 13:07 ` Helmut Raiger
2011-10-06 13:27 ` Stefano Babic
2011-09-22 14:08 ` Wolfgang Denk
2011-09-28 12:48 ` [U-Boot] mx31: Approach for WEIM CS accessors Helmut Raiger
2011-09-28 12:48 ` [U-Boot] [PATCH] mx31: provide readable WEIM CS accessor Helmut Raiger
2011-09-28 15:14 ` Stefano Babic [this message]
2011-09-29 6:32 ` Helmut Raiger
2011-09-29 6:59 ` Stefano Babic
2011-09-29 7:30 ` Helmut Raiger
2011-09-29 9:17 ` Stefano Babic
2011-09-29 12:19 ` [U-Boot] [PATCH V2] " Helmut Raiger
2011-09-29 12:25 ` [U-Boot] [Resend PATCH V2 (forgot generic.c)] " Helmut Raiger
2011-09-29 13:21 ` Stefano Babic
2011-09-29 14:01 ` Helmut Raiger
2011-09-29 14:16 ` Stefano Babic
2011-09-29 14:55 ` [U-Boot] [PATCH V3] " Helmut Raiger
2011-09-29 15:11 ` Helmut Raiger
2011-09-29 15:19 ` Stefano Babic
2011-09-29 15:45 ` [U-Boot] [Resend PATCH " Helmut Raiger
2011-09-30 7:32 ` Stefano Babic
2011-10-05 11:51 ` Stefano Babic
2011-09-29 17:32 ` [U-Boot] [Resend PATCH V2 (forgot generic.c)] " Wolfgang Denk
2011-10-14 8:05 ` [U-Boot] [PATCH V2 1/3] mx31: define pins and init for UART2 and CSPI3 Helmut Raiger
2011-10-14 8:05 ` [U-Boot] [PATCH V2 2/3] mx31: add ESD control registers Helmut Raiger
2011-10-14 13:29 ` Stefano Babic
2011-10-14 8:05 ` [U-Boot] [PATCH V2 3/3] mx31: Add board support for HALE TT-01 Helmut Raiger
2011-10-14 11:04 ` Stefano Babic
2011-10-14 21:14 ` Wolfgang Denk
2011-10-15 5:40 ` stefano babic
2011-10-15 8:52 ` Wolfgang Denk
2011-10-15 11:11 ` Stefano Babic
2011-10-14 10:04 ` [U-Boot] [PATCH V2 1/3] mx31: define pins and init for UART2 and CSPI3 Stefano Babic
2011-10-27 11:31 ` [U-Boot] [PATCH V3 " Helmut Raiger
2011-10-27 11:31 ` [U-Boot] [PATCH V3 2/3] mx31: add ESD control registers Helmut Raiger
2011-10-27 12:49 ` Stefano Babic
2011-10-28 8:28 ` Stefano Babic
2011-10-27 11:31 ` [U-Boot] [PATCH V3 3/3] mx31: Add board support for HALE TT-01 Helmut Raiger
2011-10-27 12:59 ` Stefano Babic
2011-10-27 12:49 ` [U-Boot] [PATCH V3 1/3] mx31: define pins and init for UART2 and CSPI3 Stefano Babic
2011-10-28 8:28 ` Stefano Babic
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=4E8339E9.3080204@denx.de \
--to=sbabic@denx.de \
--cc=u-boot@lists.denx.de \
/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