⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpc8536ds.c

📁 uboot200903最新版本的通用uboot
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifdef CONFIG_SYS_PCIE2_MEM_BUS2		/* outbound memory */		pci_set_region(r++,			       CONFIG_SYS_PCIE2_MEM_BUS2,			       CONFIG_SYS_PCIE2_MEM_PHYS2,			       CONFIG_SYS_PCIE2_MEM_SIZE2,			       PCI_REGION_MEM);#endif		hose->region_count = r - hose->regions;		hose->first_busno=first_free_busno;		pci_setup_indirect(hose, (int) &pci->cfg_addr, (int) &pci->cfg_data);		fsl_pci_init(hose);		first_free_busno=hose->last_busno+1;		printf ("    PCIE2 on bus %02x - %02x\n",			hose->first_busno,hose->last_busno);	} else {		printf ("    PCIE2: disabled\n");	} }#else	gur->devdisr |= MPC85xx_DEVDISR_PCIE2; /* disable */#endif#ifdef CONFIG_PCI1{	volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCI1_ADDR;	struct pci_controller *hose = &pci1_hose;	struct pci_region *r = hose->regions;	uint pci_agent = (host_agent == 6);	uint pci_speed = 66666000; /*get_clock_freq (); PCI PSPEED in [4:5] */	uint pci_32 = 1;	uint pci_arb = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;	/* PORDEVSR[14] */	uint pci_clk_sel = gur->porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;	/* PORPLLSR[16] */	if (!(devdisr & MPC85xx_DEVDISR_PCI1)) {		printf ("\n    PCI: %d bit, %s MHz, %s, %s, %s (base address %x)\n",			(pci_32) ? 32 : 64,			(pci_speed == 33333000) ? "33" :			(pci_speed == 66666000) ? "66" : "unknown",			pci_clk_sel ? "sync" : "async",			pci_agent ? "agent" : "host",			pci_arb ? "arbiter" : "external-arbiter",			(uint)pci			);		/* inbound */		r += fsl_pci_setup_inbound_windows(r);		/* outbound memory */		pci_set_region(r++,			       CONFIG_SYS_PCI1_MEM_BUS,			       CONFIG_SYS_PCI1_MEM_PHYS,			       CONFIG_SYS_PCI1_MEM_SIZE,			       PCI_REGION_MEM);		/* outbound io */		pci_set_region(r++,			       CONFIG_SYS_PCI1_IO_BUS,			       CONFIG_SYS_PCI1_IO_PHYS,			       CONFIG_SYS_PCI1_IO_SIZE,			       PCI_REGION_IO);#ifdef CONFIG_SYS_PCI1_MEM_BUS2		/* outbound memory */		pci_set_region(r++,			       CONFIG_SYS_PCI1_MEM_BUS2,			       CONFIG_SYS_PCI1_MEM_PHYS2,			       CONFIG_SYS_PCI1_MEM_SIZE2,			       PCI_REGION_MEM);#endif		hose->region_count = r - hose->regions;		hose->first_busno=first_free_busno;		pci_setup_indirect(hose, (int) &pci->cfg_addr, (int) &pci->cfg_data);		fsl_pci_init(hose);		first_free_busno=hose->last_busno+1;		printf ("PCI on bus %02x - %02x\n",			hose->first_busno,hose->last_busno);	} else {		printf ("    PCI: disabled\n");	}}#else	gur->devdisr |= MPC85xx_DEVDISR_PCI1; /* disable */#endif}int board_early_init_r(void){	const unsigned int flashbase = CONFIG_SYS_FLASH_BASE;	const u8 flash_esel = 1;	/*	 * Remap Boot flash + PROMJET region to caching-inhibited	 * so that flash can be erased properly.	 */	/* Flush d-cache and invalidate i-cache of any FLASH data */	flush_dcache();	invalidate_icache();	/* invalidate existing TLB entry for flash + promjet */	disable_tlb(flash_esel);	set_tlb(1, flashbase, CONFIG_SYS_FLASH_BASE_PHYS,	/* tlb, epn, rpn */		MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,	/* perms, wimge */		0, flash_esel, BOOKE_PAGESZ_256M, 1);	/* ts, esel, tsize, iprot */	return 0;}#ifdef CONFIG_GET_CLK_FROM_ICS307/* decode S[0-2] to Output Divider (OD) */static unsigned charics307_S_to_OD[] = {	10, 2, 8, 4, 5, 7, 3, 6};/* Calculate frequency being generated by ICS307-02 clock chip based upon * the control bytes being programmed into it. *//* XXX: This function should probably go into a common library */static unsigned longics307_clk_freq (unsigned char cw0, unsigned char cw1, unsigned char cw2){	const unsigned long long InputFrequency = CONFIG_ICS307_REFCLK_HZ;	unsigned long VDW = ((cw1 << 1) & 0x1FE) + ((cw2 >> 7) & 1);	unsigned long RDW = cw2 & 0x7F;	unsigned long OD = ics307_S_to_OD[cw0 & 0x7];	unsigned long freq;	/* CLK1Frequency = InputFrequency * 2 * (VDW + 8) / ((RDW + 2) * OD) */	/* cw0:  C1 C0 TTL F1 F0 S2 S1 S0	 * cw1:  V8 V7 V6 V5 V4 V3 V2 V1	 * cw2:  V0 R6 R5 R4 R3 R2 R1 R0	 *	 * R6:R0 = Reference Divider Word (RDW)	 * V8:V0 = VCO Divider Word (VDW)	 * S2:S0 = Output Divider Select (OD)	 * F1:F0 = Function of CLK2 Output	 * TTL = duty cycle	 * C1:C0 = internal load capacitance for cyrstal	 */	/* Adding 1 to get a "nicely" rounded number, but this needs	 * more tweaking to get a "properly" rounded number. */	freq = 1 + (InputFrequency * 2 * (VDW + 8) / ((RDW + 2) * OD));	debug("ICS307: CW[0-2]: %02X %02X %02X => %u Hz\n", cw0, cw1, cw2,		freq);	return freq;}unsigned longget_board_sys_clk(ulong dummy){	return ics307_clk_freq (	    in8(PIXIS_BASE + PIXIS_VSYSCLK0),	    in8(PIXIS_BASE + PIXIS_VSYSCLK1),	    in8(PIXIS_BASE + PIXIS_VSYSCLK2)	);}unsigned longget_board_ddr_clk(ulong dummy){	return ics307_clk_freq (	    in8(PIXIS_BASE + PIXIS_VDDRCLK0),	    in8(PIXIS_BASE + PIXIS_VDDRCLK1),	    in8(PIXIS_BASE + PIXIS_VDDRCLK2)	);}#elseunsigned longget_board_sys_clk(ulong dummy){	u8 i;	ulong val = 0;	i = in8(PIXIS_BASE + PIXIS_SPD);	i &= 0x07;	switch (i) {	case 0:		val = 33333333;		break;	case 1:		val = 40000000;		break;	case 2:		val = 50000000;		break;	case 3:		val = 66666666;		break;	case 4:		val = 83333333;		break;	case 5:		val = 100000000;		break;	case 6:		val = 133333333;		break;	case 7:		val = 166666666;		break;	}	return val;}unsigned longget_board_ddr_clk(ulong dummy){	u8 i;	ulong val = 0;	i = in8(PIXIS_BASE + PIXIS_SPD);	i &= 0x38;	i >>= 3;	switch (i) {	case 0:		val = 33333333;		break;	case 1:		val = 40000000;		break;	case 2:		val = 50000000;		break;	case 3:		val = 66666666;		break;	case 4:		val = 83333333;		break;	case 5:		val = 100000000;		break;	case 6:		val = 133333333;		break;	case 7:		val = 166666666;		break;	}	return val;}#endifint sata_initialize(void){	volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);	uint sdrs2_io_sel =		(gur->pordevsr & MPC85xx_PORDEVSR_SRDS2_IO_SEL) >> 27;	if (sdrs2_io_sel & 0x04)		return 1;	return __sata_initialize();}int board_eth_init(bd_t *bis){#ifdef CONFIG_TSEC_ENET	struct tsec_info_struct tsec_info[2];	volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);	int num = 0;	uint sdrs2_io_sel =		(gur->pordevsr & MPC85xx_PORDEVSR_SRDS2_IO_SEL) >> 27;#ifdef CONFIG_TSEC1	SET_STD_TSEC_INFO(tsec_info[num], 1);	if ((sdrs2_io_sel == 4) || (sdrs2_io_sel == 6)) {		tsec_info[num].phyaddr = 0;		tsec_info[num].flags |= TSEC_SGMII;	}	num++;#endif#ifdef CONFIG_TSEC3	SET_STD_TSEC_INFO(tsec_info[num], 3);	if (sdrs2_io_sel == 4) {		tsec_info[num].phyaddr = 1;		tsec_info[num].flags |= TSEC_SGMII;	}	num++;#endif	if (!num) {		printf("No TSECs initialized\n");		return 0;	}#ifdef CONFIG_FSL_SGMII_RISER	if ((sdrs2_io_sel == 4) || (sdrs2_io_sel == 6))		fsl_sgmii_riser_init(tsec_info, num);#endif	tsec_eth_init(bis, tsec_info, num);#endif	return pci_eth_init(bis);}#if defined(CONFIG_OF_BOARD_SETUP)extern void ft_fsl_pci_setup(void *blob, const char *pci_alias,			struct pci_controller *hose);void ft_board_setup(void *blob, bd_t *bd){	ft_cpu_setup(blob, bd);#ifdef CONFIG_PCI1	ft_fsl_pci_setup(blob, "pci0", &pci1_hose);#endif#ifdef CONFIG_PCIE2	ft_fsl_pci_setup(blob, "pci1", &pcie2_hose);#endif#ifdef CONFIG_PCIE2	ft_fsl_pci_setup(blob, "pci2", &pcie1_hose);#endif#ifdef CONFIG_PCIE1	ft_fsl_pci_setup(blob, "pci3", &pcie3_hose);#endif#ifdef CONFIG_FSL_SGMII_RISER	fsl_sgmii_riser_fdt_fixup(blob);#endif}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -