Re: [PATCH 1/5] CF: Change omap_cf.c to use omap_readw/writew instead of __REG for multi-omap

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



* David Brownell <david-b@xxxxxxxxxxx> [080516 14:26]:
> On Friday 16 May 2008, Tony Lindgren wrote:
> > @@ -38,19 +38,19 @@
> >  #define        CF_BASE 0xfffe2800
> >  
> >  /* status; read after IRQ */
> > -#define CF_STATUS_REG          __REG16(CF_BASE + 0x00)
> > +#define CF_STATUS                      (CF_BASE + 0x00)
> >  #      define  CF_STATUS_BAD_READ      (1 << 2)
> >  #      define  CF_STATUS_BAD_WRITE     (1 << 1)
> >  #      define  CF_STATUS_CARD_DETECT   (1 << 0)
> >  
> >  /* which chipselect (CS0..CS3) is used for CF (active low) */
> > -#define CF_CFG_REG             __REG16(CF_BASE + 0x02)
> > +#define CF_CFG                         (CF_BASE + 0x02)
> >  
> >	...
> 
> Trying to understand the plan here.  This first patches
> are to remove __REG*() access, we hillater patches will 
> be needed to convert things to omap_readl(BASE + OFFSET)
> style accessors?  (BASE being SOC-specific, and passed
> down from system init code.)
> 
> Not that CF is a good example of that.  I don't think
> it exists on current chips.  ;)

Well ideally we would set the base offset during driver init, then
just use  __raw_read/write().

But that's lot of work, so it's easier first to convert __REG access
to use omap_read/write(). I'll post multi-omap series as soon as I have
it booting.. But to give you and idea, we can have something like following
work for multi-omap.

In arch/arm/Makefile:

arch-$(CONFIG_MULTI_OMAP)       :=-D__LINUX_ARM_ARCH__=5 $(call cc-option,-march=armv5te -Wa$(comma)-march=armv7a,-march=armv6,-march=armv5t)

This works for 926, arm11 and cortex.


Then in io.h:

#if defined(MULTI_OMAP)
extern unsigned long io_p2v(u32 pa);
extern unsigned long io_v2p(u32 va);
extern unsigned char omap_readb(void __iomem *a);
extern unsigned short omap_readw(void __iomem *a);
extern unsigned long omap_readl(void __iomem *a);
...
#else

#ifdef CONFIG_ARCH_OMAP1

#define io_p2v(pa)	OMAP1_IO_ADDRESS(pa)
#define io_v2p(va)	((va) + OMAP1_IO_OFFSET)

#define omap_readb(a)	(*(volatile unsigned char  *)OMAP1_IO_ADDRESS(a))
#define omap_readw(a)	(*(volatile unsigned short *)OMAP1_IO_ADDRESS(a))
#define omap_readl(a)	(*(volatile unsigned int   *)OMAP1_IO_ADDRESS(a))
...

#elif defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)

#define io_p2v(pa)		 OMAP2_IO_ADDRESS(pa)
#define io_v2p(va)		 ((va) + OMAP2_IO_OFFSET)

#define omap_readb(a)		 (*(volatile unsigned char*)OMAP2_IO_ADDRESS(a))
#define omap_readw(a) (*(volatile unsigned short *)OMAP2_IO_ADDRESS(a))
#define omap_readl(a) (*(volatile unsigned int   *)OMAP2_IO_ADDRESS(a))
...

#endif
#endif


Then in io.c:

unsigned long io_p2v(u32 pa)
{
	if (cpu_class_is_omap1())
		return OMAP1_IO_ADDRESS(pa);
	else
		return OMAP2_IO_ADDRESS(pa);
}

unsigned long io_v2p(u32 va)
{
	if (cpu_class_is_omap1())
		return va + OMAP1_IO_OFFSET;
       else
		return va + OMAP2_IO_OFFSET;
}

unsigned char omap_readb(void __iomem *a)
{
	if (cpu_class_is_omap1())
		return __raw_readb(OMAP1_IO_ADDRESS(a));
	else if (cpu_is_omap24xx())
		return __raw_readb(OMAP24XX_IO_ADDRESS(a));
	else if (cpu_is_omap34xx())

return __raw_readb(OMAP34XX_IO_ADDRESS(a));
...


Regards,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux