mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-03 21:48:15 +00:00 
			
		
		
		
	When U-Boot started using SPDX tags we were among the early adopters and there weren't a lot of other examples to borrow from. So we picked the area of the file that usually had a full license text and replaced it with an appropriate SPDX-License-Identifier: entry. Since then, the Linux Kernel has adopted SPDX tags and they place it as the very first line in a file (except where shebangs are used, then it's second line) and with slightly different comment styles than us. In part due to community overlap, in part due to better tag visibility and in part for other minor reasons, switch over to that style. This commit changes all instances where we have a single declared license in the tag as both the before and after are identical in tag contents. There's also a few places where I found we did not have a tag and have introduced one. Signed-off-by: Tom Rini <trini@konsulko.com>
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// SPDX-License-Identifier: GPL-2.0+
 | 
						|
/*
 | 
						|
 * Copyright 2010-2011 Freescale Semiconductor, Inc.
 | 
						|
 * Authors: Timur Tabi <timur@freescale.com>
 | 
						|
 *
 | 
						|
 * FSL DIU Framebuffer driver
 | 
						|
 */
 | 
						|
 | 
						|
#include <common.h>
 | 
						|
#include <command.h>
 | 
						|
#include <linux/ctype.h>
 | 
						|
#include <asm/io.h>
 | 
						|
#include <stdio_dev.h>
 | 
						|
#include <video_fb.h>
 | 
						|
#include <fsl_diu_fb.h>
 | 
						|
 | 
						|
#define PMUXCR_ELBCDIU_MASK	0xc0000000
 | 
						|
#define PMUXCR_ELBCDIU_NOR16	0x80000000
 | 
						|
#define PMUXCR_ELBCDIU_DIU	0x40000000
 | 
						|
 | 
						|
/*
 | 
						|
 * DIU Area Descriptor
 | 
						|
 *
 | 
						|
 * Note that we need to byte-swap the value before it's written to the AD
 | 
						|
 * register.  So even though the registers don't look like they're in the same
 | 
						|
 * bit positions as they are on the MPC8610, the same value is written to the
 | 
						|
 * AD register on the MPC8610 and on the P1022.
 | 
						|
 */
 | 
						|
#define AD_BYTE_F		0x10000000
 | 
						|
#define AD_ALPHA_C_SHIFT	25
 | 
						|
#define AD_BLUE_C_SHIFT		23
 | 
						|
#define AD_GREEN_C_SHIFT	21
 | 
						|
#define AD_RED_C_SHIFT		19
 | 
						|
#define AD_PIXEL_S_SHIFT	16
 | 
						|
#define AD_COMP_3_SHIFT		12
 | 
						|
#define AD_COMP_2_SHIFT		8
 | 
						|
#define AD_COMP_1_SHIFT		4
 | 
						|
#define AD_COMP_0_SHIFT		0
 | 
						|
 | 
						|
/*
 | 
						|
 * Variables used by the DIU/LBC switching code.  It's safe to makes these
 | 
						|
 * global, because the DIU requires DDR, so we'll only run this code after
 | 
						|
 * relocation.
 | 
						|
 */
 | 
						|
static u32 pmuxcr;
 | 
						|
 | 
						|
void diu_set_pixel_clock(unsigned int pixclock)
 | 
						|
{
 | 
						|
	ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
 | 
						|
	unsigned long speed_ccb, temp;
 | 
						|
	u32 pixval;
 | 
						|
 | 
						|
	speed_ccb = get_bus_freq(0);
 | 
						|
	temp = 1000000000 / pixclock;
 | 
						|
	temp *= 1000;
 | 
						|
	pixval = speed_ccb / temp;
 | 
						|
	debug("DIU pixval = %u\n", pixval);
 | 
						|
 | 
						|
	/* Modify PXCLK in GUTS CLKDVDR */
 | 
						|
	temp = in_be32(&gur->clkdvdr) & 0x2000FFFF;
 | 
						|
	out_be32(&gur->clkdvdr, temp);			/* turn off clock */
 | 
						|
	out_be32(&gur->clkdvdr, temp | 0x80000000 | ((pixval & 0x1F) << 16));
 | 
						|
}
 | 
						|
 | 
						|
int platform_diu_init(unsigned int xres, unsigned int yres, const char *port)
 | 
						|
{
 | 
						|
	ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
 | 
						|
	u32 pixel_format;
 | 
						|
 | 
						|
	pixel_format = cpu_to_le32(AD_BYTE_F | (3 << AD_ALPHA_C_SHIFT) |
 | 
						|
		(0 << AD_BLUE_C_SHIFT) | (1 << AD_GREEN_C_SHIFT) |
 | 
						|
		(2 << AD_RED_C_SHIFT) | (8 << AD_COMP_3_SHIFT) |
 | 
						|
		(8 << AD_COMP_2_SHIFT) | (8 << AD_COMP_1_SHIFT) |
 | 
						|
		(8 << AD_COMP_0_SHIFT) | (3 << AD_PIXEL_S_SHIFT));
 | 
						|
 | 
						|
	printf("DIU:   Switching to %ux%u\n", xres, yres);
 | 
						|
 | 
						|
	/* Set PMUXCR to switch the muxed pins from the LBC to the DIU */
 | 
						|
	clrsetbits_be32(&gur->pmuxcr, PMUXCR_ELBCDIU_MASK, PMUXCR_ELBCDIU_DIU);
 | 
						|
	pmuxcr = in_be32(&gur->pmuxcr);
 | 
						|
 | 
						|
	return fsl_diu_init(xres, yres, pixel_format, 0);
 | 
						|
}
 |