diff options
| author | Wolfgang Denk <wd@denx.de> | 2010-06-17 22:53:03 +0200 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2010-06-17 22:53:03 +0200 | 
| commit | ec6baf53f7691da4751e98d47a014acf266ab994 (patch) | |
| tree | b76776a7b497e81df6e83017faedbd16ae2b9581 | |
| parent | bc33f8c810ae93979070757ab529b3ec5896f336 (diff) | |
| parent | f0a921518b7a016f0a9141933b0d766306394eff (diff) | |
| download | olio-uboot-2014.01-ec6baf53f7691da4751e98d47a014acf266ab994.tar.xz olio-uboot-2014.01-ec6baf53f7691da4751e98d47a014acf266ab994.zip | |
Merge branch 'next' of git://git.denx.de/u-boot-video into next
| -rw-r--r-- | arch/powerpc/cpu/mpc512x/diu.c | 14 | ||||
| -rw-r--r-- | board/freescale/mpc8610hpcd/mpc8610hpcd_diu.c | 9 | ||||
| -rw-r--r-- | drivers/video/cfb_console.c | 12 | ||||
| -rw-r--r-- | drivers/video/sm501.c | 130 | ||||
| -rw-r--r-- | include/pci_ids.h | 1 | 
5 files changed, 125 insertions, 41 deletions
| diff --git a/arch/powerpc/cpu/mpc512x/diu.c b/arch/powerpc/cpu/mpc512x/diu.c index f8d19a0a1..1cce6a233 100644 --- a/arch/powerpc/cpu/mpc512x/diu.c +++ b/arch/powerpc/cpu/mpc512x/diu.c @@ -179,18 +179,4 @@ void *video_hw_init(void)  	return (void *)pGD;  } -/** -  * Set the LUT -  * -  * @index: color number -  * @r: red -  * @b: blue -  * @g: green -  */ -void video_set_lut -	(unsigned int index, unsigned char r, unsigned char g, unsigned char b) -{ -	return; -} -  #endif /* defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE) */ diff --git a/board/freescale/mpc8610hpcd/mpc8610hpcd_diu.c b/board/freescale/mpc8610hpcd/mpc8610hpcd_diu.c index 94fb1ebf8..a7b7f4545 100644 --- a/board/freescale/mpc8610hpcd/mpc8610hpcd_diu.c +++ b/board/freescale/mpc8610hpcd/mpc8610hpcd_diu.c @@ -183,15 +183,6 @@ void *video_hw_init(void)  	return (void *)pGD;  } -void video_set_lut (unsigned int index,	/* color number */ -		    unsigned char r,	/* red */ -		    unsigned char g,	/* green */ -		    unsigned char b	/* blue */ -		    ) -{ -	return; -} -  #endif /* defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE) */  #endif /* CONFIG_FSL_DIU_FB */ diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c index d1f47c915..96d52fbae 100644 --- a/drivers/video/cfb_console.c +++ b/drivers/video/cfb_console.c @@ -749,6 +749,18 @@ void video_puts (const char *s)  /*****************************************************************************/ +/* + * Do not enforce drivers (or board code) to provide empty + * video_set_lut() if they do not support 8 bpp format. + * Implement weak default function instead. + */ +void __video_set_lut (unsigned int index, unsigned char r, +		      unsigned char g, unsigned char b) +{ +} +void video_set_lut (unsigned int, unsigned char, unsigned char, unsigned char) +			__attribute__((weak, alias("__video_set_lut"))); +  #if defined(CONFIG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)  #define FILL_8BIT_332RGB(r,g,b)	{			\ diff --git a/drivers/video/sm501.c b/drivers/video/sm501.c index 283d2d969..6a1e0109b 100644 --- a/drivers/video/sm501.c +++ b/drivers/video/sm501.c @@ -31,6 +31,7 @@  #include <common.h> +#include <asm/io.h>  #include <video_fb.h>  #include <sm501.h> @@ -54,6 +55,18 @@  GraphicDevice sm501; +void write_be32(int off, unsigned int val) +{ +	out_be32((unsigned __iomem *)(sm501.isaBase + off), val); +} + +void write_le32(int off, unsigned int val) +{ +	out_le32((unsigned __iomem *)(sm501.isaBase + off), val); +} + +void (*write_reg32)(int off, unsigned int val) = write_be32; +  /*-----------------------------------------------------------------------------   * SmiSetRegs --   *----------------------------------------------------------------------------- @@ -66,7 +79,7 @@ static void SmiSetRegs (void)  	 */  	const SMI_REGS *preg = board_get_regs ();  	while (preg->Index) { -		write32 (preg->Index, preg->Value); +		write_reg32 (preg->Index, preg->Value);  		/*  		 * Insert a delay between  		 */ @@ -75,26 +88,120 @@ static void SmiSetRegs (void)  	}  } +#ifdef CONFIG_VIDEO_SM501_PCI +static struct pci_device_id sm501_pci_tbl[] = { +	{ PCI_VENDOR_ID_SMI, PCI_DEVICE_ID_SMI_501 }, +	{} +}; +#endif + +/* + * We do not enforce board code to provide empty/unused + * functions for this driver and define weak default + * functions here. + */ +unsigned int __board_video_init (void) +{ +	return 0; +} + +unsigned int board_video_init (void) +			__attribute__((weak, alias("__board_video_init"))); + +unsigned int __board_video_get_fb (void) +{ +	return 0; +} + +unsigned int board_video_get_fb (void) +			__attribute__((weak, alias("__board_video_get_fb"))); + +void __board_validate_screen (unsigned int base) +{ +} + +void board_validate_screen (unsigned int base) +			__attribute__((weak, alias("__board_validate_screen"))); +  /*-----------------------------------------------------------------------------   * video_hw_init --   *-----------------------------------------------------------------------------   */  void *video_hw_init (void)  { +#ifdef CONFIG_VIDEO_SM501_PCI +	unsigned int pci_mem_base, pci_mmio_base; +	unsigned int id; +	unsigned short device_id; +	pci_dev_t devbusfn; +	int mem; +#endif  	unsigned int *vm, i;  	memset (&sm501, 0, sizeof (GraphicDevice)); +#ifdef CONFIG_VIDEO_SM501_PCI +	printf("Video: "); + +	/* Look for SM501/SM502 chips */ +	devbusfn = pci_find_devices(sm501_pci_tbl, 0); +	if (devbusfn < 0) { +		printf ("PCI Controller not found.\n"); +		goto not_pci; +	} + +	/* Setup */ +	pci_write_config_dword (devbusfn, PCI_COMMAND, +				(PCI_COMMAND_MEMORY | PCI_COMMAND_IO)); +	pci_read_config_word (devbusfn, PCI_DEVICE_ID, &device_id); +	pci_read_config_dword (devbusfn, PCI_REVISION_ID, &id); +	pci_read_config_dword (devbusfn, PCI_BASE_ADDRESS_0, &pci_mem_base); +	pci_read_config_dword (devbusfn, PCI_BASE_ADDRESS_1, &pci_mmio_base); +	sm501.frameAdrs = pci_mem_to_phys (devbusfn, pci_mem_base); +	sm501.isaBase = pci_mem_to_phys (devbusfn, pci_mmio_base); + +	if (sm501.isaBase) +		write_reg32 = write_le32; + +	mem = in_le32 ((unsigned __iomem *)(sm501.isaBase + 0x10)); +	mem = (mem & 0x0000e000) >> 13; +	switch (mem) { +	case 1: +		mem = 8; +		break; +	case 2: +		mem = 16; +		break; +	case 3: +		mem = 32; +		break; +	case 4: +		mem = 64; +		break; +	case 5: +		mem = 2; +		break; +	case 0: +	default: +		mem = 4; +	} +	printf ("PCI SM50%d %d MB\n", ((id & 0xff) == 0xC0) ? 2 : 1, mem); +not_pci: +#endif  	/*  	 * Initialization of the access to the graphic chipset Retreive base  	 * address of the chipset (see board/RPXClassic/eccx.c)  	 */ -	if ((sm501.isaBase = board_video_init ()) == 0) { -		return (NULL); +	if (!sm501.isaBase) { +		sm501.isaBase = board_video_init (); +		if (!sm501.isaBase) +			return NULL;  	} -	if ((sm501.frameAdrs = board_video_get_fb ()) == 0) { -		return (NULL); +	if (!sm501.frameAdrs) { +		sm501.frameAdrs = board_video_get_fb (); +		if (!sm501.frameAdrs) +			return NULL;  	}  	sm501.winSizeX = board_get_width (); @@ -131,16 +238,3 @@ void *video_hw_init (void)  	return (&sm501);  } - -/*----------------------------------------------------------------------------- - * video_set_lut -- - *----------------------------------------------------------------------------- - */ -void video_set_lut ( -	unsigned int index,           /* color number */ -	unsigned char r,              /* red */ -	unsigned char g,              /* green */ -	unsigned char b               /* blue */ -	) -{ -} diff --git a/include/pci_ids.h b/include/pci_ids.h index edfdc1e0a..dcc381d30 100644 --- a/include/pci_ids.h +++ b/include/pci_ids.h @@ -1454,6 +1454,7 @@  #define PCI_DEVICE_ID_SMI_710		0x0710  #define PCI_DEVICE_ID_SMI_712		0x0712  #define PCI_DEVICE_ID_SMI_810		0x0810 +#define PCI_DEVICE_ID_SMI_501		0x0501  #define PCI_VENDOR_ID_HUGHES		0x1273  #define PCI_DEVICE_ID_HUGHES_DIRECPC	0x0002 |