[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 01/10] arm: remove the ARM HDLCD driver
Hi Stefano, On 23/05/18 01:24, Stefano Stabellini wrote: The ARM HDLCD driver is unused. The device itself can only be found on Virtual Express boards that are for early development only. Remove the driver. Also remove vexpress_syscfg, now unused, and "select VIDEO" that is not useful anymore. Suggested-by: Julien Grall <julien.grall@xxxxxxx> Signed-off-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> Reviewed-by: Julien Grall <julien.grall@xxxxxxx> Cheers, --- Changes in v3: - remove "select VIDEO" - remove vexpress_syscfg Changes in v2: - patch added --- xen/arch/arm/Kconfig | 2 - xen/arch/arm/platforms/vexpress.c | 35 ---- xen/drivers/video/Kconfig | 3 - xen/drivers/video/Makefile | 1 - xen/drivers/video/arm_hdlcd.c | 281 ------------------------------- xen/include/asm-arm/platforms/vexpress.h | 6 - 6 files changed, 328 deletions(-) delete mode 100644 xen/drivers/video/arm_hdlcd.c diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig index 8174c0c..4dc7ef5 100644 --- a/xen/arch/arm/Kconfig +++ b/xen/arch/arm/Kconfig @@ -17,12 +17,10 @@ config ARM_64 config ARM def_bool y select HAS_ALTERNATIVE - select HAS_ARM_HDLCD select HAS_DEVICE_TREE select HAS_MEM_ACCESS select HAS_PASSTHROUGH select HAS_PDX - select VIDEOconfig ARCH_DEFCONFIGstring diff --git a/xen/arch/arm/platforms/vexpress.c b/xen/arch/arm/platforms/vexpress.c index 70839d6..b6193f7 100644 --- a/xen/arch/arm/platforms/vexpress.c +++ b/xen/arch/arm/platforms/vexpress.c @@ -59,41 +59,6 @@ static inline int vexpress_ctrl_start(uint32_t *syscfg, int write, return 0; }-int vexpress_syscfg(int write, int function, int device, uint32_t *data)-{ - uint32_t *syscfg = (uint32_t *) FIXMAP_ADDR(FIXMAP_MISC); - int ret = -1; - - set_fixmap(FIXMAP_MISC, maddr_to_mfn(V2M_SYS_MMIO_BASE), - PAGE_HYPERVISOR_NOCACHE); - - if ( syscfg[V2M_SYS_CFGCTRL/4] & V2M_SYS_CFG_START ) - goto out; - - /* clear the complete bit in the V2M_SYS_CFGSTAT status register */ - syscfg[V2M_SYS_CFGSTAT/4] = 0; - - if ( write ) - { - /* write data */ - syscfg[V2M_SYS_CFGDATA/4] = *data; - - if ( vexpress_ctrl_start(syscfg, write, function, device) < 0 ) - goto out; - } else { - if ( vexpress_ctrl_start(syscfg, write, function, device) < 0 ) - goto out; - else - /* read data */ - *data = syscfg[V2M_SYS_CFGDATA/4]; - } - - ret = 0; -out: - clear_fixmap(FIXMAP_MISC); - return ret; -} - /* * TODO: Get base address from the device tree * See arm,vexpress-reset node diff --git a/xen/drivers/video/Kconfig b/xen/drivers/video/Kconfig index 52e8ce6..41ca503 100644 --- a/xen/drivers/video/Kconfig +++ b/xen/drivers/video/Kconfig @@ -11,6 +11,3 @@ config VGA Enable VGA output for the Xen hypervisor.If unsure, say Y.- -config HAS_ARM_HDLCD - bool diff --git a/xen/drivers/video/Makefile b/xen/drivers/video/Makefile index 2bb91d6..2b3fc76 100644 --- a/xen/drivers/video/Makefile +++ b/xen/drivers/video/Makefile @@ -4,4 +4,3 @@ obj-$(CONFIG_VIDEO) += font_8x16.o obj-$(CONFIG_VIDEO) += font_8x8.o obj-$(CONFIG_VIDEO) += lfb.o obj-$(CONFIG_VGA) += vesa.o -obj-$(CONFIG_HAS_ARM_HDLCD) += arm_hdlcd.o diff --git a/xen/drivers/video/arm_hdlcd.c b/xen/drivers/video/arm_hdlcd.c deleted file mode 100644 index e1174b2..0000000 --- a/xen/drivers/video/arm_hdlcd.c +++ /dev/null @@ -1,281 +0,0 @@ -/* - * xen/drivers/video/arm_hdlcd.c - * - * Driver for ARM HDLCD Controller - * - * Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> - * Copyright (c) 2013 Citrix Systems. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * 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. - */ - -#include <asm/delay.h> -#include <asm/types.h> -#include <asm/platforms/vexpress.h> -#include <xen/device_tree.h> -#include <xen/libfdt/libfdt.h> -#include <xen/init.h> -#include <xen/mm.h> -#include "font.h" -#include "lfb.h" -#include "modelines.h" - -#define HDLCD ((volatile uint32_t *) FIXMAP_ADDR(FIXMAP_MISC)) - -#define HDLCD_INTMASK (0x18/4) -#define HDLCD_FBBASE (0x100/4) -#define HDLCD_LINELENGTH (0x104/4) -#define HDLCD_LINECOUNT (0x108/4) -#define HDLCD_LINEPITCH (0x10C/4) -#define HDLCD_BUS (0x110/4) -#define HDLCD_VSYNC (0x200/4) -#define HDLCD_VBACK (0x204/4) -#define HDLCD_VDATA (0x208/4) -#define HDLCD_VFRONT (0x20C/4) -#define HDLCD_HSYNC (0x210/4) -#define HDLCD_HBACK (0x214/4) -#define HDLCD_HDATA (0x218/4) -#define HDLCD_HFRONT (0x21C/4) -#define HDLCD_POLARITIES (0x220/4) -#define HDLCD_COMMAND (0x230/4) -#define HDLCD_PF (0x240/4) -#define HDLCD_RED (0x244/4) -#define HDLCD_GREEN (0x248/4) -#define HDLCD_BLUE (0x24C/4) - -struct color_masks { - int red_shift; - int red_size; - int green_shift; - int green_size; - int blue_shift; - int blue_size; -}; - -struct pixel_colors { - const char* bpp; - struct color_masks colors; -}; - -struct pixel_colors __initdata colors[] = { - { "16", { 0, 5, 11, 5, 6, 5 } }, - { "24", { 0, 8, 16, 8, 8, 8 } }, - { "32", { 0, 8, 16, 8, 8, 8 } }, -}; - -static void vga_noop_puts(const char *s) {} -void (*video_puts)(const char *) = vga_noop_puts; - -static void hdlcd_flush(void) -{ - dsb(sy); -} - -static int __init get_color_masks(const char* bpp, struct color_masks **masks) -{ - int i; - for ( i = 0; i < ARRAY_SIZE(colors); i++ ) - { - if ( !strncmp(colors[i].bpp, bpp, 2) ) - { - *masks = &colors[i].colors; - return 0; - } - } - return -1; -} - -static void __init set_pixclock(uint32_t pixclock) -{ - if ( dt_find_compatible_node(NULL, NULL, "arm,vexpress") ) - vexpress_syscfg(1, V2M_SYS_CFG_OSC_FUNC, - V2M_SYS_CFG_OSC5, &pixclock); -} - -void __init video_init(void) -{ - struct lfb_prop lfbp; - unsigned char *lfb; - paddr_t hdlcd_start, hdlcd_size; - paddr_t framebuffer_start, framebuffer_size; - const char *mode_string; - char _mode_string[16]; - int bytes_per_pixel = 4; - struct color_masks *c = NULL; - struct modeline *videomode = NULL; - int i; - const struct dt_device_node *dev; - const __be32 *cells; - u32 lenp; - int res; - - dev = dt_find_compatible_node(NULL, NULL, "arm,hdlcd"); - - if ( !dev ) - { - printk("HDLCD: Cannot find node compatible with \"arm,hdcld\"\n"); - return; - } - - res = dt_device_get_address(dev, 0, &hdlcd_start, &hdlcd_size); - if ( !res ) - { - printk("HDLCD: Unable to retrieve MMIO base address\n"); - return; - } - - cells = dt_get_property(dev, "framebuffer", &lenp); - if ( !cells ) - { - printk("HDLCD: Unable to retrieve framebuffer property\n"); - return; - } - - framebuffer_start = dt_next_cell(dt_n_addr_cells(dev), &cells); - framebuffer_size = dt_next_cell(dt_n_size_cells(dev), &cells); - - if ( !hdlcd_start ) - { - printk(KERN_ERR "HDLCD: address missing from device tree, disabling driver\n"); - return; - } - - if ( !framebuffer_start ) - { - printk(KERN_ERR "HDLCD: framebuffer address missing from device tree, disabling driver\n"); - return; - } - - res = dt_property_read_string(dev, "mode", &mode_string); - if ( res ) - { - get_color_masks("32", &c); - memcpy(_mode_string, "1280x1024@60", strlen("1280x1024@60") + 1); - bytes_per_pixel = 4; - } - else if ( strlen(mode_string) < strlen("800x600@60") || - strlen(mode_string) > sizeof(_mode_string) - 1 ) - { - printk(KERN_ERR "HDLCD: invalid modeline=%s\n", mode_string); - return; - } else { - char *s = strchr(mode_string, '-'); - if ( !s ) - { - printk(KERN_INFO "HDLCD: bpp not found in modeline %s, assume 32 bpp\n", - mode_string); - get_color_masks("32", &c); - memcpy(_mode_string, mode_string, strlen(mode_string) + 1); - bytes_per_pixel = 4; - } else { - if ( strlen(s) < 6 ) - { - printk(KERN_ERR "HDLCD: invalid mode %s\n", mode_string); - return; - } - s++; - if ( get_color_masks(s, &c) < 0 ) - { - printk(KERN_WARNING "HDLCD: unsupported bpp %s\n", s); - return; - } - bytes_per_pixel = simple_strtoll(s, NULL, 10) / 8; - } - i = s - mode_string - 1; - memcpy(_mode_string, mode_string, i); - memcpy(_mode_string + i, mode_string + i + 3, 4); - } - - for ( i = 0; i < ARRAY_SIZE(videomodes); i++ ) { - if ( !strcmp(_mode_string, videomodes[i].mode) ) - { - videomode = &videomodes[i]; - break; - } - } - if ( !videomode ) - { - printk(KERN_WARNING "HDLCD: unsupported videomode %s\n", - _mode_string); - return; - } - - if ( framebuffer_size < bytes_per_pixel * videomode->xres * videomode->yres ) - { - printk(KERN_ERR "HDLCD: the framebuffer is too small, disabling the HDLCD driver\n"); - return; - } - - printk(KERN_INFO "Initializing HDLCD driver\n"); - - lfb = ioremap_wc(framebuffer_start, framebuffer_size); - if ( !lfb ) - { - printk(KERN_ERR "Couldn't map the framebuffer\n"); - return; - } - memset(lfb, 0x00, bytes_per_pixel * videomode->xres * videomode->yres); - - /* uses FIXMAP_MISC */ - set_pixclock(videomode->pixclock); - - set_fixmap(FIXMAP_MISC, maddr_to_mfn(hdlcd_start), PAGE_HYPERVISOR_NOCACHE); - HDLCD[HDLCD_COMMAND] = 0; - - HDLCD[HDLCD_LINELENGTH] = videomode->xres * bytes_per_pixel; - HDLCD[HDLCD_LINECOUNT] = videomode->yres - 1; - HDLCD[HDLCD_LINEPITCH] = videomode->xres * bytes_per_pixel; - HDLCD[HDLCD_PF] = ((bytes_per_pixel - 1) << 3); - HDLCD[HDLCD_INTMASK] = 0; - HDLCD[HDLCD_FBBASE] = framebuffer_start; - HDLCD[HDLCD_BUS] = 0xf00 | (1 << 4); - HDLCD[HDLCD_VBACK] = videomode->vback - 1; - HDLCD[HDLCD_VSYNC] = videomode->vsync - 1; - HDLCD[HDLCD_VDATA] = videomode->yres - 1; - HDLCD[HDLCD_VFRONT] = videomode->vfront - 1; - HDLCD[HDLCD_HBACK] = videomode->hback - 1; - HDLCD[HDLCD_HSYNC] = videomode->hsync - 1; - HDLCD[HDLCD_HDATA] = videomode->xres - 1; - HDLCD[HDLCD_HFRONT] = videomode->hfront - 1; - HDLCD[HDLCD_POLARITIES] = (1 << 2) | (1 << 3); - HDLCD[HDLCD_RED] = (c->red_size << 8) | c->red_shift; - HDLCD[HDLCD_GREEN] = (c->green_size << 8) | c->green_shift; - HDLCD[HDLCD_BLUE] = (c->blue_size << 8) | c->blue_shift; - HDLCD[HDLCD_COMMAND] = 1; - clear_fixmap(FIXMAP_MISC); - - lfbp.pixel_on = (((1 << c->red_size) - 1) << c->red_shift) | - (((1 << c->green_size) - 1) << c->green_shift) | - (((1 << c->blue_size) - 1) << c->blue_shift); - lfbp.lfb = lfb; - lfbp.font = &font_vga_8x16; - lfbp.bits_per_pixel = bytes_per_pixel*8; - lfbp.bytes_per_line = bytes_per_pixel*videomode->xres; - lfbp.width = videomode->xres; - lfbp.height = videomode->yres; - lfbp.flush = hdlcd_flush; - lfbp.text_columns = videomode->xres / 8; - lfbp.text_rows = videomode->yres / 16; - if ( lfb_init(&lfbp) < 0 ) - return; - video_puts = lfb_scroll_puts; -} - -void __init video_endboot(void) { } - -/* - * Local variables: - * mode: C - * c-file-style: "BSD" - * c-basic-offset: 4 - * indent-tabs-mode: nil - * End: - */ diff --git a/xen/include/asm-arm/platforms/vexpress.h b/xen/include/asm-arm/platforms/vexpress.h index 5cf3aba..8b45d3a 100644 --- a/xen/include/asm-arm/platforms/vexpress.h +++ b/xen/include/asm-arm/platforms/vexpress.h @@ -26,12 +26,6 @@ /* Board-specific: base address of system controller */ #define SP810_ADDRESS 0x1C020000-#ifndef __ASSEMBLY__-#include <xen/inttypes.h> - -int vexpress_syscfg(int write, int function, int device, uint32_t *data); -#endif - #endif /* __ASM_ARM_PLATFORMS_VEXPRESS_H */ /* * Local variables: -- Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |