All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Warren <biggerbadderben@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] [PATCH 08/13] SPARC: added SMC91111 driver in and	out macros for LEON processors.
Date: Sun, 30 Mar 2008 00:29:25 -0400	[thread overview]
Message-ID: <47EF1725.7050106@gmail.com> (raw)
In-Reply-To: <1206732179-23031-8-git-send-email-daniel@gaisler.com>

Daniel Hellstrom wrote:
> Hello Wolfgang,
>
> This patch makes SPARC/LEON processors able to read and write
> to the SMC91111 chip using the chip external I/O bus of the memory
> controller. This patchs defines the standard in and out macros
> expected by the SMC9111 driver.
>
> To access that I/O bus one must set up the memory controller
> (MCTRL or FTMCTRL) correctly. It is assumed that the user sets
> up this correctly when the other MCTRL parameters are set up. It
> can be set up from the board configuration header file.
>
> This patch is also available at ftp://ftp.gaisler.com/gaisler.com/u-boot/patches.
>
> Best Regards,
> Daniel Hellstrom
>
> Signed-off-by: Daniel Hellstrom <daniel@gaisler.com>
> ---
>  drivers/net/smc91111.h |   74 +++++++++++++++++++++++++++++++++++++++++++++++-
>  1 files changed, 73 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/net/smc91111.h b/drivers/net/smc91111.h
> index 8dcbb3e..6c4af64 100644
> --- a/drivers/net/smc91111.h
> +++ b/drivers/net/smc91111.h
> @@ -176,7 +176,79 @@ typedef unsigned long int 		dword;
>  					};  \
>  				})
>  
> -#else /* if not CONFIG_PXA250 */
> +#elif defined(CONFIG_LEON)	/* if not CONFIG_PXA250 */
> +
> +#define SMC_LEON_SWAP16(_x_)                                        \
> +    ({ word _x = (_x_); ((_x << 8) | (_x >> 8)); })
> +
> +#define SMC_LEON_SWAP32(_x_)                        \
> +    ({ dword _x = (_x_);                   \
> +       ((_x << 24) |                            \
> +       ((0x0000FF00UL & _x) <<  8) |            \
> +       ((0x00FF0000UL & _x) >>  8) |            \
> +       (_x  >> 24)); })
> +
> +#define	SMC_inl(r) 	(SMC_LEON_SWAP32((*(volatile dword *)(SMC_BASE_ADDRESS+((r)<<0)))))
> +#define	SMC_inl_nosw(r) 	((*(volatile dword *)(SMC_BASE_ADDRESS+((r)<<0))))
> +#define	SMC_inw(r) 	(SMC_LEON_SWAP16((*(volatile word *)(SMC_BASE_ADDRESS+((r)<<0)))))
> +#define	SMC_inw_nosw(r) 	((*(volatile word *)(SMC_BASE_ADDRESS+((r)<<0))))
> +#define SMC_inb(p)	({ \
> +	word ___v = SMC_inw((p) & ~1); \
> +	if (p & 1) ___v >>= 8; \
> +	else ___v &= 0xff; \
> +	___v; })
> +#define	SMC_outl(d,r)	(*(volatile dword *)(SMC_BASE_ADDRESS+((r)<<0))=SMC_LEON_SWAP32(d))
> +#define	SMC_outl_nosw(d,r)	(*(volatile dword *)(SMC_BASE_ADDRESS+((r)<<0))=(d))
> +#define	SMC_outw(d,r)	(*(volatile word *)(SMC_BASE_ADDRESS+((r)<<0))=SMC_LEON_SWAP16(d))
> +#define	SMC_outw_nosw(d,r)	(*(volatile word *)(SMC_BASE_ADDRESS+((r)<<0))=(d))
> +#define	SMC_outb(d,r)	({	word __d = (byte)(d);  \
> +				word __w = SMC_inw((r)&~1);  \
> +				__w &= ((r)&1) ? 0x00FF : 0xFF00;  \
> +				__w |= ((r)&1) ? __d<<8 : __d;  \
> +				SMC_outw(__w,(r)&~1);  \
> +			})
> +#define SMC_outsl(r,b,l)	({	int __i; \
> +					dword *__b2; \
> +					__b2 = (dword *) b; \
> +					for (__i = 0; __i < l; __i++) { \
> +					    SMC_outl_nosw( *(__b2 + __i), r); \
> +					} \
> +				})
> +#define SMC_outsw(r,b,l)	({	int __i; \
> +					word *__b2; \
> +					__b2 = (word *) b; \
> +					for (__i = 0; __i < l; __i++) { \
> +					    SMC_outw_nosw( *(__b2 + __i), r); \
> +					} \
> +				})
> +#define SMC_insl(r,b,l) 	({	int __i ;  \
> +					dword *__b2;  \
> +			    		__b2 = (dword *) b;  \
> +			    		for (__i = 0; __i < l; __i++) {  \
> +					  *(__b2 + __i) = SMC_inl_nosw(r);  \
> +					  SMC_inl(0);  \
> +					};  \
> +				})
> +
> +#define SMC_insw(r,b,l) 	({	int __i ;  \
> +					word *__b2;  \
> +			    		__b2 = (word *) b;  \
> +			    		for (__i = 0; __i < l; __i++) {  \
> +					  *(__b2 + __i) = SMC_inw_nosw(r);  \
> +					  SMC_inw(0);  \
> +					};  \
> +				})
> +
> +#define SMC_insb(r,b,l) 	({	int __i ;  \
> +					byte *__b2;  \
> +			    		__b2 = (byte *) b;  \
> +			    		for (__i = 0; __i < l; __i++) {  \
> +					  *(__b2 + __i) = SMC_inb(r);  \
> +					  SMC_inb(0);  \
> +					};  \
> +				})
> +
> +#else				/* if not CONFIG_PXA250 and not CONFIG_LEON */
>  
>  #ifndef CONFIG_SMC_USE_IOFUNCS /* these macros don't work on some boards */
>  /*
>   
I haven't looked at how all the funky macros in this patch are called, 
but it's generally considered good form to wrap multi-line macros with 
do {...} while(0) in order to avoid compiler issues. I'll NAK the patch 
for now based on this.

regards,
Ben

  reply	other threads:[~2008-03-30  4:29 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-28 19:22 [U-Boot-Users] [PATCH 01/13] SPARC: Added generic support for SPARC architecture Daniel Hellstrom
2008-03-28 19:22 ` [U-Boot-Users] [PATCH 02/13] SPARC: added SPARC board information to the command bdinfo Daniel Hellstrom
2008-03-28 19:22 ` [U-Boot-Users] [PATCH 03/13] SPARC: added SPARC support for new uimage in common code Daniel Hellstrom
2008-03-28 19:22 ` [U-Boot-Users] [PATCH 04/13] SPARC: Added support for SPARC LEON3 SOC processor Daniel Hellstrom
2008-03-28 19:22 ` [U-Boot-Users] [PATCH 05/13] SPARC/LEON3: Added AMBA Bus Plug&Play information print command (ambapp) Daniel Hellstrom
2008-03-28 19:22 ` [U-Boot-Users] [PATCH 06/13] SPARC: Added support for SPARC LEON2 SOC Processor Daniel Hellstrom
2008-03-28 19:22 ` [U-Boot-Users] [PATCH 07/13] SPARC/LEON3: Added GRETH Ethernet 10/100/1000 driver Daniel Hellstrom
2008-03-30  4:35   ` Ben Warren
2008-03-28 19:22 ` [U-Boot-Users] [PATCH 08/13] SPARC: added SMC91111 driver in and out macros for LEON processors Daniel Hellstrom
2008-03-30  4:29   ` Ben Warren [this message]
     [not found]   ` <20080331111242.GA29923@mail.gnudd.com>
2008-03-31 14:15     ` Ben Warren
2008-03-28 19:22 ` [U-Boot-Users] [PATCH 09/13] SPARC/LEON3: added support for GR-XC3S-1500 board with GRLIB template design Daniel Hellstrom
2008-03-28 19:22 ` [U-Boot-Users] [PATCH 10/13] SPARC/LEON3: added support for Gaisler GRSIM/TSIM2 SPARC/LEON3 simulatorn Daniel Hellstrom
2008-03-28 19:22 ` [U-Boot-Users] [PATCH 11/13] SPARC/LEON3: added support for Altera NIOS Development kit (STRATIX II Edition) with GRLIB template design Daniel Hellstrom
2008-03-28 19:22 ` [U-Boot-Users] [PATCH 12/13] SPARC/LEON3: added support for GR-CPCI-AX2000 FPGA AX board Daniel Hellstrom
2008-03-28 19:22 ` [U-Boot-Users] [PATCH 13/13] SPARC/LEON2: added support for Gaisler simulator GRSIM/TSIM for SPARC/LEON2 targets Daniel Hellstrom
  -- strict thread matches above, loose matches on Subject: below --
2008-03-31 14:25 [U-Boot-Users] [PATCH 08/13] SPARC: added SMC91111 driver in and out macros for LEON processors Daniel Hellstrom
2008-03-31 14:21 ` Ben Warren
2008-03-31 14:40   ` Daniel Hellstrom
2008-03-31 14:53     ` Ben Warren

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=47EF1725.7050106@gmail.com \
    --to=biggerbadderben@gmail.com \
    --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 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.