* [PATCH 1/4] video stm/mx2x: simplify memory allocation
2011-01-17 10:22 i.MX28 patches v2 Sascha Hauer
@ 2011-01-17 10:22 ` Sascha Hauer
2011-01-17 10:22 ` [PATCH 2/4] video stm/mx2x: allow to pass in fb memory from platform data Sascha Hauer
` (2 subsequent siblings)
3 siblings, 0 replies; 10+ messages in thread
From: Sascha Hauer @ 2011-01-17 10:22 UTC (permalink / raw)
To: barebox
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
drivers/video/stm.c | 29 +++++------------------------
1 files changed, 5 insertions(+), 24 deletions(-)
diff --git a/drivers/video/stm.c b/drivers/video/stm.c
index f0abe4c..ecf450c 100644
--- a/drivers/video/stm.c
+++ b/drivers/video/stm.c
@@ -209,24 +209,6 @@ static inline unsigned calc_line_length(unsigned ppl, unsigned bpp)
return (ppl * bpp) >> 3;
}
-static int stmfb_memory_mmgt(struct fb_info *fb_info, unsigned size)
-{
- struct imxfb_info *fbi = fb_info->priv;
-
- if (fbi->memory_size != 0) {
- free(fb_info->screen_base);
- fb_info->screen_base = NULL;
- fbi->memory_size = 0;
- }
-
- if (fbi->memory_size == 0) {
- fb_info->screen_base = xzalloc(size);
- fbi->memory_size = size;
- }
-
- return 0;
-}
-
static void stmfb_enable_controller(struct fb_info *fb_info)
{
struct imxfb_info *fbi = fb_info->priv;
@@ -308,7 +290,6 @@ static int stmfb_activate_var(struct fb_info *fb_info)
struct imx_fb_videomode *pdata = fbi->pdata;
struct fb_videomode *mode = fb_info->mode;
uint32_t reg;
- int ret;
unsigned size;
/*
@@ -317,11 +298,11 @@ static int stmfb_activate_var(struct fb_info *fb_info)
size = calc_line_length(mode->xres, fb_info->bits_per_pixel) *
mode->yres;
- ret = stmfb_memory_mmgt(fb_info, size);
- if (ret != 0) {
- dev_err(fbi->hw_dev, "Cannot allocate framebuffer memory\n");
- return ret;
- }
+ fb_info->screen_base = realloc(fb_info->screen_base, size);
+ if (!fb_info->screen_base)
+ return -ENOMEM;
+ memset(fb_info->screen_base, 0, size);
+ fbi->memory_size = size;
/** @todo ensure HCLK is active at this point of time! */
--
1.7.2.3
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/4] video stm/mx2x: allow to pass in fb memory from platform data
2011-01-17 10:22 i.MX28 patches v2 Sascha Hauer
2011-01-17 10:22 ` [PATCH 1/4] video stm/mx2x: simplify memory allocation Sascha Hauer
@ 2011-01-17 10:22 ` Sascha Hauer
2011-01-17 17:56 ` [PATCH 2/4 v2] " Sascha Hauer
2011-01-17 10:22 ` [PATCH 3/4] ARM i.MX28 tx28: use a fixed framebuffer address Sascha Hauer
2011-01-17 10:22 ` [PATCH 4/4] ARM i.MX28 tx28 defconfig: enable MMU Sascha Hauer
3 siblings, 1 reply; 10+ messages in thread
From: Sascha Hauer @ 2011-01-17 10:22 UTC (permalink / raw)
To: barebox
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
arch/arm/mach-stm/include/mach/fb.h | 3 +++
drivers/video/stm.c | 17 ++++++++++++-----
2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/arch/arm/mach-stm/include/mach/fb.h b/arch/arm/mach-stm/include/mach/fb.h
index 65e3be2..2eade76 100644
--- a/arch/arm/mach-stm/include/mach/fb.h
+++ b/arch/arm/mach-stm/include/mach/fb.h
@@ -37,6 +37,9 @@ struct imx_fb_videomode {
unsigned dotclk_delay; /**< refer manual HW_LCDIF_VDCTRL4 register */
unsigned ld_intf_width; /**< refer STMLCDIF_* macros */
+
+ void *fixed_screen; /**< if != NULL use this as framebuffer memory */
+ unsigned fixed_screen_size; /**< framebuffer memory size for fixed_screen */
};
#endif /* __MACH_FB_H */
diff --git a/drivers/video/stm.c b/drivers/video/stm.c
index ecf450c..a665850 100644
--- a/drivers/video/stm.c
+++ b/drivers/video/stm.c
@@ -298,11 +298,18 @@ static int stmfb_activate_var(struct fb_info *fb_info)
size = calc_line_length(mode->xres, fb_info->bits_per_pixel) *
mode->yres;
- fb_info->screen_base = realloc(fb_info->screen_base, size);
- if (!fb_info->screen_base)
- return -ENOMEM;
- memset(fb_info->screen_base, 0, size);
- fbi->memory_size = size;
+ if (pdata->fixed_screen) {
+ if (pdata->fixed_screen_size < size)
+ return -ENOMEM;
+ fb_info->screen_base = pdata->fixed_screen;
+ fbi->memory_size = pdata->fixed_screen_size;
+ } else {
+ fb_info->screen_base = realloc(fb_info->screen_base, size);
+ if (!fb_info->screen_base)
+ return -ENOMEM;
+ memset(fb_info->screen_base, 0, size);
+ fbi->memory_size = size;
+ }
/** @todo ensure HCLK is active at this point of time! */
--
1.7.2.3
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/4 v2] video stm/mx2x: allow to pass in fb memory from platform data
2011-01-17 10:22 ` [PATCH 2/4] video stm/mx2x: allow to pass in fb memory from platform data Sascha Hauer
@ 2011-01-17 17:56 ` Sascha Hauer
0 siblings, 0 replies; 10+ messages in thread
From: Sascha Hauer @ 2011-01-17 17:56 UTC (permalink / raw)
To: barebox
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
v2: do not forget to set the framebuffer to zero in case of platform
provided fb address
arch/arm/mach-stm/include/mach/fb.h | 3 +++
drivers/video/stm.c | 16 ++++++++++++----
2 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/arch/arm/mach-stm/include/mach/fb.h b/arch/arm/mach-stm/include/mach/fb.h
index 65e3be2..2eade76 100644
--- a/arch/arm/mach-stm/include/mach/fb.h
+++ b/arch/arm/mach-stm/include/mach/fb.h
@@ -37,6 +37,9 @@ struct imx_fb_videomode {
unsigned dotclk_delay; /**< refer manual HW_LCDIF_VDCTRL4 register */
unsigned ld_intf_width; /**< refer STMLCDIF_* macros */
+
+ void *fixed_screen; /**< if != NULL use this as framebuffer memory */
+ unsigned fixed_screen_size; /**< framebuffer memory size for fixed_screen */
};
#endif /* __MACH_FB_H */
diff --git a/drivers/video/stm.c b/drivers/video/stm.c
index ecf450c..3ccb309 100644
--- a/drivers/video/stm.c
+++ b/drivers/video/stm.c
@@ -298,11 +298,19 @@ static int stmfb_activate_var(struct fb_info *fb_info)
size = calc_line_length(mode->xres, fb_info->bits_per_pixel) *
mode->yres;
- fb_info->screen_base = realloc(fb_info->screen_base, size);
- if (!fb_info->screen_base)
- return -ENOMEM;
+ if (pdata->fixed_screen) {
+ if (pdata->fixed_screen_size < size)
+ return -ENOMEM;
+ fb_info->screen_base = pdata->fixed_screen;
+ fbi->memory_size = pdata->fixed_screen_size;
+ } else {
+ fb_info->screen_base = realloc(fb_info->screen_base, size);
+ if (!fb_info->screen_base)
+ return -ENOMEM;
+ fbi->memory_size = size;
+ }
+
memset(fb_info->screen_base, 0, size);
- fbi->memory_size = size;
/** @todo ensure HCLK is active at this point of time! */
--
1.7.2.3
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 3/4] ARM i.MX28 tx28: use a fixed framebuffer address
2011-01-17 10:22 i.MX28 patches v2 Sascha Hauer
2011-01-17 10:22 ` [PATCH 1/4] video stm/mx2x: simplify memory allocation Sascha Hauer
2011-01-17 10:22 ` [PATCH 2/4] video stm/mx2x: allow to pass in fb memory from platform data Sascha Hauer
@ 2011-01-17 10:22 ` Sascha Hauer
2011-01-17 10:59 ` Juergen Beisert
2011-01-17 10:22 ` [PATCH 4/4] ARM i.MX28 tx28 defconfig: enable MMU Sascha Hauer
3 siblings, 1 reply; 10+ messages in thread
From: Sascha Hauer @ 2011-01-17 10:22 UTC (permalink / raw)
To: barebox
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
arch/arm/boards/karo-tx28/tx28-stk5.c | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/arch/arm/boards/karo-tx28/tx28-stk5.c b/arch/arm/boards/karo-tx28/tx28-stk5.c
index 6de41f7..adad8b9 100644
--- a/arch/arm/boards/karo-tx28/tx28-stk5.c
+++ b/arch/arm/boards/karo-tx28/tx28-stk5.c
@@ -19,11 +19,13 @@
#include <errno.h>
#include <mci.h>
#include <fec.h>
+#include <sizes.h>
#include <asm/io.h>
#include <mach/imx-regs.h>
#include <mach/clock.h>
#include <mach/mci.h>
#include <mach/fb.h>
+#include <asm/sections.h>
static struct stm_mci_platform_data mci_pdata = {
.caps = MMC_MODE_4BIT | MMC_MODE_HS | MMC_MODE_HS_52MHz,
@@ -181,11 +183,15 @@ static struct fb_videomode tx28evk_vmodes[] = {
},
};
+#define MAX_FB_SIZE SZ_2M
+
static struct imx_fb_videomode imxfb_mode = {
.mode_list = tx28evk_vmodes,
.mode_cnt = ARRAY_SIZE(tx28evk_vmodes),
.dotclk_delay = 0, /* no adaption required */
.ld_intf_width = STMLCDIF_24BIT, /* full 24 bit */
+ .fixed_screen = (void *)(0x40000000 + SZ_128M - MAX_FB_SIZE),
+ .fixed_screen_size = MAX_FB_SIZE,
};
static struct device_d ldcif_dev = {
@@ -352,6 +358,12 @@ void base_board_init(void)
imx_set_sspclk(0, 100000000, 1);
register_device(&mci_socket);
+
+ if (imxfb_mode.fixed_screen < (void *)_end) {
+ printf("Warning: fixed_screen overlaps barebox\n");
+ imxfb_mode.fixed_screen = NULL;
+ }
+
register_device(&ldcif_dev);
imx_enable_enetclk();
--
1.7.2.3
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 3/4] ARM i.MX28 tx28: use a fixed framebuffer address
2011-01-17 10:22 ` [PATCH 3/4] ARM i.MX28 tx28: use a fixed framebuffer address Sascha Hauer
@ 2011-01-17 10:59 ` Juergen Beisert
2011-01-17 22:49 ` Marc Reilly
0 siblings, 1 reply; 10+ messages in thread
From: Juergen Beisert @ 2011-01-17 10:59 UTC (permalink / raw)
To: barebox
Sascha Hauer wrote:
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> ---
> arch/arm/boards/karo-tx28/tx28-stk5.c | 12 ++++++++++++
> 1 files changed, 12 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/boards/karo-tx28/tx28-stk5.c
> b/arch/arm/boards/karo-tx28/tx28-stk5.c index 6de41f7..adad8b9 100644
> --- a/arch/arm/boards/karo-tx28/tx28-stk5.c
> +++ b/arch/arm/boards/karo-tx28/tx28-stk5.c
> @@ -19,11 +19,13 @@
> #include <errno.h>
> #include <mci.h>
> #include <fec.h>
> +#include <sizes.h>
> #include <asm/io.h>
> #include <mach/imx-regs.h>
> #include <mach/clock.h>
> #include <mach/mci.h>
> #include <mach/fb.h>
> +#include <asm/sections.h>
>
> static struct stm_mci_platform_data mci_pdata = {
> .caps = MMC_MODE_4BIT | MMC_MODE_HS | MMC_MODE_HS_52MHz,
> @@ -181,11 +183,15 @@ static struct fb_videomode tx28evk_vmodes[] = {
> },
> };
>
> +#define MAX_FB_SIZE SZ_2M
> +
> static struct imx_fb_videomode imxfb_mode = {
> .mode_list = tx28evk_vmodes,
> .mode_cnt = ARRAY_SIZE(tx28evk_vmodes),
> .dotclk_delay = 0, /* no adaption required */
> .ld_intf_width = STMLCDIF_24BIT, /* full 24 bit */
> + .fixed_screen = (void *)(0x40000000 + SZ_128M - MAX_FB_SIZE),
> + .fixed_screen_size = MAX_FB_SIZE,
> };
Question only: Any idea how we could make this setup (base address and size of
the fixed screen) a runtime feature? This would be a nice feature like most
modern BIOS also have: Make the size of the video memory shared with the CPU
selectable at runtime.
jbe
--
Pengutronix e.K. | Juergen Beisert |
Linux Solutions for Science and Industry | Phone: +49-8766-939 228 |
Vertretung Sued/Muenchen, Germany | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de/ |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 3/4] ARM i.MX28 tx28: use a fixed framebuffer address
2011-01-17 10:59 ` Juergen Beisert
@ 2011-01-17 22:49 ` Marc Reilly
2011-01-18 7:48 ` Peter Korsgaard
0 siblings, 1 reply; 10+ messages in thread
From: Marc Reilly @ 2011-01-17 22:49 UTC (permalink / raw)
To: barebox
> > static struct imx_fb_videomode imxfb_mode = {
> >
> > .mode_list = tx28evk_vmodes,
> > .mode_cnt = ARRAY_SIZE(tx28evk_vmodes),
> > .dotclk_delay = 0, /* no adaption required */
> > .ld_intf_width = STMLCDIF_24BIT, /* full 24 bit */
> >
> > + .fixed_screen = (void *)(0x40000000 + SZ_128M - MAX_FB_SIZE),
> > + .fixed_screen_size = MAX_FB_SIZE,
> >
> > };
>
> Question only: Any idea how we could make this setup (base address and size
> of the fixed screen) a runtime feature? This would be a nice feature like
> most modern BIOS also have: Make the size of the video memory shared with
> the CPU selectable at runtime.
>
Purely out of interest, what is the advantage/necessity for having the frame
buffer at a fixed address?
Cheers
Marc
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 4/4] ARM i.MX28 tx28 defconfig: enable MMU
2011-01-17 10:22 i.MX28 patches v2 Sascha Hauer
` (2 preceding siblings ...)
2011-01-17 10:22 ` [PATCH 3/4] ARM i.MX28 tx28: use a fixed framebuffer address Sascha Hauer
@ 2011-01-17 10:22 ` Sascha Hauer
3 siblings, 0 replies; 10+ messages in thread
From: Sascha Hauer @ 2011-01-17 10:22 UTC (permalink / raw)
To: barebox
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
arch/arm/configs/tx28stk5_defconfig | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/arm/configs/tx28stk5_defconfig b/arch/arm/configs/tx28stk5_defconfig
index 0851d5e..88ace35 100644
--- a/arch/arm/configs/tx28stk5_defconfig
+++ b/arch/arm/configs/tx28stk5_defconfig
@@ -2,6 +2,7 @@ CONFIG_ARCH_STM=y
CONFIG_ARCH_IMX28=y
CONFIG_AEABI=y
CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
+CONFIG_MMU=y
CONFIG_MALLOC_SIZE=0x800000
CONFIG_BROKEN=y
CONFIG_LONGHELP=y
--
1.7.2.3
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 10+ messages in thread