Re: [PATCH 04/15] OMAP: Add support for VRFB rotation engine

2009-08-07 Thread Tomi Valkeinen

ext Tony Lindgren wrote:

* Tomi Valkeinen tomi.valkei...@nokia.com [090805 17:19]:

VRFB rotation engine is a block in OMAP2/3 that offers 12 independent
contexts that can be used for framebuffer rotation.

Each context has a backend area of real memory, where it stores the
pixels in undisclosed format. This memory is offered to users via 4
virtual memory areas, which see the same memory area in different
rotation angles (0, 90, 180 and 270 degrees).

Signed-off-by: Tomi Valkeinen tomi.valkei...@nokia.com
---
 arch/arm/plat-omap/Kconfig |3 +
 arch/arm/plat-omap/Makefile|1 +
 arch/arm/plat-omap/include/mach/vrfb.h |   46 +
 arch/arm/plat-omap/vrfb.c  |  281 
 4 files changed, 331 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/plat-omap/include/mach/vrfb.h
 create mode 100644 arch/arm/plat-omap/vrfb.c

diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig
index ca06037..2d6ae55 100644
--- a/arch/arm/plat-omap/Kconfig
+++ b/arch/arm/plat-omap/Kconfig
@@ -186,6 +186,9 @@ config OMAP_SERIAL_WAKE
 config OMAP2_VRAM
  bool

+config OMAP2_VRFB
+ bool
+
 endmenu

 endif
diff --git a/arch/arm/plat-omap/Makefile b/arch/arm/plat-omap/Makefile
index 0472bbe..462edf3 100644
--- a/arch/arm/plat-omap/Makefile
+++ b/arch/arm/plat-omap/Makefile
@@ -26,3 +26,4 @@ obj-y += $(i2c-omap-m) $(i2c-omap-y)
 obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o

 obj-$(CONFIG_OMAP2_VRAM) += vram.o
+obj-$(CONFIG_OMAP2_VRFB) += vrfb.o


Can you please place this file under drivers/video?


Ok. I still feel a common place, like plat-omap is better place for vrfb 
and vram, but I don't feel too strongly about it =). drivers/video works 
fine also.






diff --git a/arch/arm/plat-omap/include/mach/vrfb.h 
b/arch/arm/plat-omap/include/mach/vrfb.h
new file mode 100644


snip


+
+static inline void restore_hw_context(int ctx)
+{
+ omap_writel(vrfb_hw_context[ctx].control, SMS_ROT_CONTROL(ctx));
+ omap_writel(vrfb_hw_context[ctx].size, SMS_ROT_SIZE(ctx));
+ omap_writel(vrfb_hw_context[ctx].physical_ba, SMS_ROT_PHYSICAL_BA(ctx));
+}


Please use ioremap + and readl/writel instead of omap_read/write for all new 
code.

Otherwise we'll have harder time to reclaim more address space for kernel
as discussed earlier on linux-omap list.


True. But I noticed that SMS registers are already mapped by sdrc.c. I 
sent a patch adding functions for manipulating SMS_ROT_* registers. I 
think that's a cleaner way than remapping them again in VRFB.


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


Re: [PATCH 04/15] OMAP: Add support for VRFB rotation engine

2009-08-05 Thread Tony Lindgren
* Tomi Valkeinen tomi.valkei...@nokia.com [090805 17:19]:
 VRFB rotation engine is a block in OMAP2/3 that offers 12 independent
 contexts that can be used for framebuffer rotation.
 
 Each context has a backend area of real memory, where it stores the
 pixels in undisclosed format. This memory is offered to users via 4
 virtual memory areas, which see the same memory area in different
 rotation angles (0, 90, 180 and 270 degrees).
 
 Signed-off-by: Tomi Valkeinen tomi.valkei...@nokia.com
 ---
  arch/arm/plat-omap/Kconfig |3 +
  arch/arm/plat-omap/Makefile|1 +
  arch/arm/plat-omap/include/mach/vrfb.h |   46 +
  arch/arm/plat-omap/vrfb.c  |  281 
 
  4 files changed, 331 insertions(+), 0 deletions(-)
  create mode 100644 arch/arm/plat-omap/include/mach/vrfb.h
  create mode 100644 arch/arm/plat-omap/vrfb.c
 
 diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig
 index ca06037..2d6ae55 100644
 --- a/arch/arm/plat-omap/Kconfig
 +++ b/arch/arm/plat-omap/Kconfig
 @@ -186,6 +186,9 @@ config OMAP_SERIAL_WAKE
  config OMAP2_VRAM
   bool
  
 +config OMAP2_VRFB
 + bool
 +
  endmenu
  
  endif
 diff --git a/arch/arm/plat-omap/Makefile b/arch/arm/plat-omap/Makefile
 index 0472bbe..462edf3 100644
 --- a/arch/arm/plat-omap/Makefile
 +++ b/arch/arm/plat-omap/Makefile
 @@ -26,3 +26,4 @@ obj-y += $(i2c-omap-m) $(i2c-omap-y)
  obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o
  
  obj-$(CONFIG_OMAP2_VRAM) += vram.o
 +obj-$(CONFIG_OMAP2_VRFB) += vrfb.o

Can you please place this file under drivers/video?


 diff --git a/arch/arm/plat-omap/include/mach/vrfb.h 
 b/arch/arm/plat-omap/include/mach/vrfb.h
 new file mode 100644
 index 000..8790612
 --- /dev/null
 +++ b/arch/arm/plat-omap/include/mach/vrfb.h
 @@ -0,0 +1,46 @@
 +/*
 + * VRFB Rotation Engine
 + *
 + * Copyright (C) 2009 Nokia Corporation
 + * Author: Tomi Valkeinen tomi.valkei...@nokia.com
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
 + * published by the Free Software Foundation.
 + *
 + * This program is distributed in the hope that it will be useful, but
 + * WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * General Public License for more details.
 + *
 + * You should have received a copy of the GNU General Public License along
 + * with this program; if not, write to the Free Software Foundation, Inc.,
 + * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 + */
 +
 +#ifndef __OMAP_VRFB_H__
 +#define __OMAP_VRFB_H__
 +
 +#define OMAP_VRFB_LINE_LEN 2048
 +
 +struct vrfb {
 + u8 context;
 + void __iomem *vaddr[4];
 + unsigned long paddr[4];
 + u16 xoffset;
 + u16 yoffset;
 + u8 bytespp;
 +};
 +
 +extern int omap_vrfb_request_ctx(struct vrfb *vrfb);
 +extern void omap_vrfb_release_ctx(struct vrfb *vrfb);
 +extern void omap_vrfb_suspend_ctx(struct vrfb *vrfb);
 +extern void omap_vrfb_resume_ctx(struct vrfb *vrfb);
 +extern void omap_vrfb_adjust_size(u16 *width, u16 *height,
 + u8 bytespp);
 +extern void omap_vrfb_setup(struct vrfb *vrfb, unsigned long paddr,
 + u16 width, u16 height,
 + unsigned bytespp, bool yuv_mode);
 +extern void omap_vrfb_restore_context(void);
 +
 +#endif /* __VRFB_H */
 diff --git a/arch/arm/plat-omap/vrfb.c b/arch/arm/plat-omap/vrfb.c
 new file mode 100644
 index 000..240058f
 --- /dev/null
 +++ b/arch/arm/plat-omap/vrfb.c
 @@ -0,0 +1,281 @@
 +/*
 + * VRFB Rotation Engine
 + *
 + * Copyright (C) 2009 Nokia Corporation
 + * Author: Tomi Valkeinen tomi.valkei...@nokia.com
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
 + * published by the Free Software Foundation.
 + *
 + * This program is distributed in the hope that it will be useful, but
 + * WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * General Public License for more details.
 + *
 + * You should have received a copy of the GNU General Public License along
 + * with this program; if not, write to the Free Software Foundation, Inc.,
 + * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 + */
 +
 +#include linux/kernel.h
 +#include linux/module.h
 +#include linux/ioport.h
 +#include linux/io.h
 +#include linux/bitops.h
 +#include linux/mutex.h
 +
 +#include mach/io.h
 +#include mach/vrfb.h
 +/*#define DEBUG*/
 +
 +#ifdef DEBUG
 +#define DBG(format, ...) pr_debug(VRFB:  format, ## __VA_ARGS__)
 +#else
 +#define DBG(format, ...)
 +#endif
 +
 +#define SMS_ROT_VIRT_BASE(context, rot) \
 + (((context = 4) ? 0xD000 : 0x7000) \
 +  + (0x400 * (context)) \
 +  + (0x100 * (rot)))
 +
 +#define OMAP_VRFB_SIZE