mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-04 14:00:19 +00:00 
			
		
		
		
	Merge branch 'mpc86xx'
This commit is contained in:
		
						commit
						f1f33de332
					
				@ -50,12 +50,12 @@ void sdram_init(void);
 | 
				
			|||||||
long int fixed_sdram(void);
 | 
					long int fixed_sdram(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int board_early_init_f (void)
 | 
					int board_early_init_f(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int checkboard (void)
 | 
					int checkboard(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	puts("Board: MPC8641HPCN\n");
 | 
						puts("Board: MPC8641HPCN\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -80,7 +80,7 @@ int checkboard (void)
 | 
				
			|||||||
			debug(" with errors.  Clearing.  Now 0x%08x",
 | 
								debug(" with errors.  Clearing.  Now 0x%08x",
 | 
				
			||||||
			      pex1->pme_msg_det);
 | 
								      pex1->pme_msg_det);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		debug ("\n");
 | 
							debug("\n");
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		puts("PCI-EXPRESS 1: Disabled\n");
 | 
							puts("PCI-EXPRESS 1: Disabled\n");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -99,9 +99,9 @@ initdram(int board_type)
 | 
				
			|||||||
	long dram_size = 0;
 | 
						long dram_size = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_SPD_EEPROM)
 | 
					#if defined(CONFIG_SPD_EEPROM)
 | 
				
			||||||
	dram_size = spd_sdram ();
 | 
						dram_size = spd_sdram();
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	dram_size = fixed_sdram ();
 | 
						dram_size = fixed_sdram();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CFG_RAMBOOT)
 | 
					#if defined(CFG_RAMBOOT)
 | 
				
			||||||
@ -122,7 +122,8 @@ initdram(int board_type)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CFG_DRAM_TEST)
 | 
					#if defined(CFG_DRAM_TEST)
 | 
				
			||||||
int testdram(void)
 | 
					int
 | 
				
			||||||
 | 
					testdram(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	uint *pstart = (uint *) CFG_MEMTEST_START;
 | 
						uint *pstart = (uint *) CFG_MEMTEST_START;
 | 
				
			||||||
	uint *pend = (uint *) CFG_MEMTEST_END;
 | 
						uint *pend = (uint *) CFG_MEMTEST_END;
 | 
				
			||||||
@ -134,7 +135,7 @@ int testdram(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for (p = pstart; p < pend; p++) {
 | 
						for (p = pstart; p < pend; p++) {
 | 
				
			||||||
		if (*p != 0xaaaaaaaa) {
 | 
							if (*p != 0xaaaaaaaa) {
 | 
				
			||||||
			printf ("SDRAM test fails at: %08x\n", (uint) p);
 | 
								printf("SDRAM test fails at: %08x\n", (uint) p);
 | 
				
			||||||
			return 1;
 | 
								return 1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -145,7 +146,7 @@ int testdram(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for (p = pstart; p < pend; p++) {
 | 
						for (p = pstart; p < pend; p++) {
 | 
				
			||||||
		if (*p != 0x55555555) {
 | 
							if (*p != 0x55555555) {
 | 
				
			||||||
			printf ("SDRAM test fails at: %08x\n", (uint) p);
 | 
								printf("SDRAM test fails at: %08x\n", (uint) p);
 | 
				
			||||||
			return 1;
 | 
								return 1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -160,11 +161,12 @@ int testdram(void)
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * Fixed sdram init -- doesn't use serial presence detect.
 | 
					 * Fixed sdram init -- doesn't use serial presence detect.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
long int fixed_sdram(void)
 | 
					long int
 | 
				
			||||||
 | 
					fixed_sdram(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if !defined(CFG_RAMBOOT)
 | 
					#if !defined(CFG_RAMBOOT)
 | 
				
			||||||
	volatile immap_t *immap = (immap_t *)CFG_IMMR;
 | 
						volatile immap_t *immap = (immap_t *) CFG_IMMR;
 | 
				
			||||||
	volatile ccsr_ddr_t *ddr= &immap->im_ddr1;
 | 
						volatile ccsr_ddr_t *ddr = &immap->im_ddr1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ddr->cs0_bnds = CFG_DDR_CS0_BNDS;
 | 
						ddr->cs0_bnds = CFG_DDR_CS0_BNDS;
 | 
				
			||||||
	ddr->cs0_config = CFG_DDR_CS0_CONFIG;
 | 
						ddr->cs0_config = CFG_DDR_CS0_CONFIG;
 | 
				
			||||||
@ -211,28 +213,25 @@ long int fixed_sdram(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#ifndef CONFIG_PCI_PNP
 | 
					#ifndef CONFIG_PCI_PNP
 | 
				
			||||||
static struct pci_config_table pci_fsl86xxads_config_table[] = {
 | 
					static struct pci_config_table pci_fsl86xxads_config_table[] = {
 | 
				
			||||||
    { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
 | 
						{PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
 | 
				
			||||||
	 PCI_IDSEL_NUMBER, PCI_ANY_ID,
 | 
						 PCI_IDSEL_NUMBER, PCI_ANY_ID,
 | 
				
			||||||
      pci_cfgfunc_config_device, { PCI_ENET0_IOADDR,
 | 
						 pci_cfgfunc_config_device, {PCI_ENET0_IOADDR,
 | 
				
			||||||
				     PCI_ENET0_MEMADDR,
 | 
									     PCI_ENET0_MEMADDR,
 | 
				
			||||||
				   PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER
 | 
									     PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER}},
 | 
				
			||||||
      } },
 | 
						{}
 | 
				
			||||||
    { }
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct pci_controller hose = {
 | 
					static struct pci_controller hose = {
 | 
				
			||||||
#ifndef CONFIG_PCI_PNP
 | 
					#ifndef CONFIG_PCI_PNP
 | 
				
			||||||
	config_table: pci_mpc86xxcts_config_table,
 | 
					      config_table:pci_mpc86xxcts_config_table,
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* CONFIG_PCI */
 | 
					#endif /* CONFIG_PCI */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void pci_init_board(void)
 | 
				
			||||||
void
 | 
					 | 
				
			||||||
pci_init_board(void)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef CONFIG_PCI
 | 
					#ifdef CONFIG_PCI
 | 
				
			||||||
	extern void pci_mpc86xx_init(struct pci_controller *hose);
 | 
						extern void pci_mpc86xx_init(struct pci_controller *hose);
 | 
				
			||||||
@ -260,7 +259,7 @@ ft_board_setup(void *blob, bd_t *bd)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
mpc8641_reset_board(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
					mpc8641_reset_board(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	char cmd;
 | 
						char cmd;
 | 
				
			||||||
	ulong val;
 | 
						ulong val;
 | 
				
			||||||
@ -294,7 +293,7 @@ mpc8641_reset_board(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
				
			|||||||
		} else
 | 
							} else
 | 
				
			||||||
			goto my_usage;
 | 
								goto my_usage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		while (1); /* Not reached */
 | 
							while (1) ;	/* Not reached */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case 'l':
 | 
						case 'l':
 | 
				
			||||||
		if (argv[2][1] == 'f') {
 | 
							if (argv[2][1] == 'f') {
 | 
				
			||||||
@ -305,7 +304,8 @@ mpc8641_reset_board(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			corepll = strfractoint(argv[4]);
 | 
								corepll = strfractoint(argv[4]);
 | 
				
			||||||
			val = val + set_px_corepll(corepll);
 | 
								val = val + set_px_corepll(corepll);
 | 
				
			||||||
			val = val + set_px_mpxpll(simple_strtoul(argv[5], NULL, 10));
 | 
								val = val + set_px_mpxpll(simple_strtoul(argv[5],
 | 
				
			||||||
 | 
													 NULL, 10));
 | 
				
			||||||
			if (val == 3) {
 | 
								if (val == 3) {
 | 
				
			||||||
				puts("Setting registers VCFGEN0, VCFGEN1, VBOOT, and VCTL\n");
 | 
									puts("Setting registers VCFGEN0, VCFGEN1, VBOOT, and VCTL\n");
 | 
				
			||||||
				set_altbank();
 | 
									set_altbank();
 | 
				
			||||||
@ -316,9 +316,9 @@ mpc8641_reset_board(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
				
			|||||||
			} else
 | 
								} else
 | 
				
			||||||
				goto my_usage;
 | 
									goto my_usage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			while(1); /* Not reached */
 | 
								while (1) ;	/* Not reached */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		} else if(argv[2][1] == 'd'){
 | 
							} else if (argv[2][1] == 'd') {
 | 
				
			||||||
			/*
 | 
								/*
 | 
				
			||||||
			 * Reset from alternate bank without changing
 | 
								 * Reset from alternate bank without changing
 | 
				
			||||||
			 * frequencies but with watchdog timer enabled.
 | 
								 * frequencies but with watchdog timer enabled.
 | 
				
			||||||
@ -330,7 +330,7 @@ mpc8641_reset_board(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
				
			|||||||
			read_from_px_regs_altbank(1);
 | 
								read_from_px_regs_altbank(1);
 | 
				
			||||||
			puts("Enabling watchdog timer on the FPGA and resetting board to boot from the other bank....\n");
 | 
								puts("Enabling watchdog timer on the FPGA and resetting board to boot from the other bank....\n");
 | 
				
			||||||
			set_px_go_with_watchdog();
 | 
								set_px_go_with_watchdog();
 | 
				
			||||||
			while(1); /* Not reached */
 | 
								while (1) ;	/* Not reached */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			/*
 | 
								/*
 | 
				
			||||||
@ -339,7 +339,7 @@ mpc8641_reset_board(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
				
			|||||||
			 */
 | 
								 */
 | 
				
			||||||
			read_from_px_regs(0);
 | 
								read_from_px_regs(0);
 | 
				
			||||||
			read_from_px_regs_altbank(0);
 | 
								read_from_px_regs_altbank(0);
 | 
				
			||||||
			if(argc > 2)
 | 
								if (argc > 2)
 | 
				
			||||||
				goto my_usage;
 | 
									goto my_usage;
 | 
				
			||||||
			puts("Setting registers VCFGNE1, VBOOT, and VCTL\n");
 | 
								puts("Setting registers VCFGNE1, VBOOT, and VCTL\n");
 | 
				
			||||||
			set_altbank();
 | 
								set_altbank();
 | 
				
			||||||
@ -360,12 +360,14 @@ my_usage:
 | 
				
			|||||||
	puts("See MPC8641HPCN Design Workbook for valid values of command line parameters.\n");
 | 
						puts("See MPC8641HPCN Design Workbook for valid values of command line parameters.\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * get_board_sys_clk
 | 
					 * get_board_sys_clk
 | 
				
			||||||
 *      Reads the FPGA on board for CONFIG_SYS_CLK_FREQ
 | 
					 *      Reads the FPGA on board for CONFIG_SYS_CLK_FREQ
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned long get_board_sys_clk(ulong dummy)
 | 
					unsigned long
 | 
				
			||||||
 | 
					get_board_sys_clk(ulong dummy)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u8 i, go_bit, rd_clks;
 | 
						u8 i, go_bit, rd_clks;
 | 
				
			||||||
	ulong val = 0;
 | 
						ulong val = 0;
 | 
				
			||||||
@ -422,4 +424,3 @@ unsigned long get_board_sys_clk(ulong dummy)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return val;
 | 
						return val;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -92,13 +92,13 @@ int set_px_sysclk(ulong sysclk)
 | 
				
			|||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	vclkh = (sysclk_s << 5) | sysclk_r ;
 | 
						vclkh = (sysclk_s << 5) | sysclk_r;
 | 
				
			||||||
	vclkl = sysclk_v;
 | 
						vclkl = sysclk_v;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	out8(PIXIS_BASE + PIXIS_VCLKH, vclkh);
 | 
						out8(PIXIS_BASE + PIXIS_VCLKH, vclkh);
 | 
				
			||||||
	out8(PIXIS_BASE + PIXIS_VCLKL, vclkl);
 | 
						out8(PIXIS_BASE + PIXIS_VCLKL, vclkl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	out8(PIXIS_BASE + PIXIS_AUX,sysclk_aux);
 | 
						out8(PIXIS_BASE + PIXIS_AUX, sysclk_aux);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 1;
 | 
						return 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -118,7 +118,7 @@ int set_px_mpxpll(ulong mpxpll)
 | 
				
			|||||||
	case 12:
 | 
						case 12:
 | 
				
			||||||
	case 14:
 | 
						case 14:
 | 
				
			||||||
	case 16:
 | 
						case 16:
 | 
				
			||||||
		val = (u8)mpxpll;
 | 
							val = (u8) mpxpll;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		printf("Unsupported MPXPLL ratio.\n");
 | 
							printf("Unsupported MPXPLL ratio.\n");
 | 
				
			||||||
@ -245,19 +245,16 @@ int disable_watchdog(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* setting VCTL[WDEN] to 0 to disable watch dog */
 | 
						/* setting VCTL[WDEN] to 0 to disable watch dog */
 | 
				
			||||||
	tmp = in8(PIXIS_BASE + PIXIS_VCTL);
 | 
						tmp = in8(PIXIS_BASE + PIXIS_VCTL);
 | 
				
			||||||
	tmp &= ~ 0x08;
 | 
						tmp &= ~0x08;
 | 
				
			||||||
	out8(PIXIS_BASE + PIXIS_VCTL, tmp);
 | 
						out8(PIXIS_BASE + PIXIS_VCTL, tmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
U_BOOT_CMD(
 | 
					U_BOOT_CMD(
 | 
				
			||||||
	   diswd, 1, 0, disable_watchdog,
 | 
						   diswd, 1, 0, disable_watchdog,
 | 
				
			||||||
	   "diswd	- Disable watchdog timer \n",
 | 
						   "diswd	- Disable watchdog timer \n",
 | 
				
			||||||
	NULL
 | 
						   NULL);
 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * This function takes the non-integral cpu:mpx pll ratio
 | 
					 * This function takes the non-integral cpu:mpx pll ratio
 | 
				
			||||||
@ -295,7 +292,7 @@ ulong strfractoint(uchar *strptr)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (no_dec) {
 | 
						if (no_dec) {
 | 
				
			||||||
		/* Currently needed only for single digit corepll ratios */
 | 
							/* Currently needed only for single digit corepll ratios */
 | 
				
			||||||
		mulconst=10;
 | 
							mulconst = 10;
 | 
				
			||||||
		decval = 0;
 | 
							decval = 0;
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		j = 0;
 | 
							j = 0;
 | 
				
			||||||
 | 
				
			|||||||
@ -31,13 +31,13 @@
 | 
				
			|||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
	unsigned char id[4];		/* 0x0000 - 0x0003 */
 | 
						unsigned char id[4];		/* 0x0000 - 0x0003 */
 | 
				
			||||||
	unsigned char sn[12];		/* 0x0004 - 0x000F */
 | 
						unsigned char sn[12];		/* 0x0004 - 0x000F */
 | 
				
			||||||
	unsigned char errata[5];/* 0x0010 - 0x0014 */
 | 
						unsigned char errata[5];	/* 0x0010 - 0x0014 */
 | 
				
			||||||
	unsigned char date[7];		/* 0x0015 - 0x001a */
 | 
						unsigned char date[7];		/* 0x0015 - 0x001a */
 | 
				
			||||||
	unsigned char res_1[37];/* 0x001b - 0x003f */
 | 
						unsigned char res_1[37];	/* 0x001b - 0x003f */
 | 
				
			||||||
	unsigned char tab_size;		/* 0x0040 */
 | 
						unsigned char tab_size;		/* 0x0040 */
 | 
				
			||||||
	unsigned char tab_flag;		/* 0x0041 */
 | 
						unsigned char tab_flag;		/* 0x0041 */
 | 
				
			||||||
	unsigned char mac[8][6];/* 0x0042 - 0x0071 */
 | 
						unsigned char mac[8][6];	/* 0x0042 - 0x0071 */
 | 
				
			||||||
	unsigned char res_2[126];/* 0x0072 - 0x00ef */
 | 
						unsigned char res_2[126];	/* 0x0072 - 0x00ef */
 | 
				
			||||||
	unsigned int crc;		/* 0x00f0 - 0x00f3 crc32 checksum */
 | 
						unsigned int crc;		/* 0x00f0 - 0x00f3 crc32 checksum */
 | 
				
			||||||
} EEPROM_data;
 | 
					} EEPROM_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -48,29 +48,33 @@ int mac_show(void)
 | 
				
			|||||||
	int i;
 | 
						int i;
 | 
				
			||||||
	unsigned char ethaddr[8][18];
 | 
						unsigned char ethaddr[8][18];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printf("ID %c%c%c%c\n", mac_data.id[0],\
 | 
						printf("ID %c%c%c%c\n",
 | 
				
			||||||
				mac_data.id[1],\
 | 
						       mac_data.id[0],
 | 
				
			||||||
				mac_data.id[2],\
 | 
						       mac_data.id[1],
 | 
				
			||||||
 | 
						       mac_data.id[2],
 | 
				
			||||||
	       mac_data.id[3]);
 | 
						       mac_data.id[3]);
 | 
				
			||||||
	printf("Errata %c%c%c%c%c\n",   mac_data.errata[0],\
 | 
						printf("Errata %c%c%c%c%c\n",
 | 
				
			||||||
				mac_data.errata[1],\
 | 
						       mac_data.errata[0],
 | 
				
			||||||
				mac_data.errata[2],\
 | 
						       mac_data.errata[1],
 | 
				
			||||||
				mac_data.errata[3],\
 | 
						       mac_data.errata[2],
 | 
				
			||||||
 | 
						       mac_data.errata[3],
 | 
				
			||||||
	       mac_data.errata[4]);
 | 
						       mac_data.errata[4]);
 | 
				
			||||||
	printf("Date %c%c%c%c%c%c%c\n", mac_data.date[0],\
 | 
						printf("Date %c%c%c%c%c%c%c\n",
 | 
				
			||||||
				mac_data.date[1],\
 | 
						       mac_data.date[0],
 | 
				
			||||||
				mac_data.date[2],\
 | 
						       mac_data.date[1],
 | 
				
			||||||
				mac_data.date[3],\
 | 
						       mac_data.date[2],
 | 
				
			||||||
				mac_data.date[4],\
 | 
						       mac_data.date[3],
 | 
				
			||||||
				mac_data.date[5],\
 | 
						       mac_data.date[4],
 | 
				
			||||||
 | 
						       mac_data.date[5],
 | 
				
			||||||
	       mac_data.date[6]);
 | 
						       mac_data.date[6]);
 | 
				
			||||||
	for (i = 0; i < 8; i++) {
 | 
						for (i = 0; i < 8; i++) {
 | 
				
			||||||
		sprintf(ethaddr[i],"%02x:%02x:%02x:%02x:%02x:%02x",\
 | 
							sprintf(ethaddr[i],
 | 
				
			||||||
					mac_data.mac[i][0],\
 | 
								"%02x:%02x:%02x:%02x:%02x:%02x",
 | 
				
			||||||
					mac_data.mac[i][1],\
 | 
								mac_data.mac[i][0],
 | 
				
			||||||
					mac_data.mac[i][2],\
 | 
								mac_data.mac[i][1],
 | 
				
			||||||
					mac_data.mac[i][3],\
 | 
								mac_data.mac[i][2],
 | 
				
			||||||
					mac_data.mac[i][4],\
 | 
								mac_data.mac[i][3],
 | 
				
			||||||
 | 
								mac_data.mac[i][4],
 | 
				
			||||||
			mac_data.mac[i][5]);
 | 
								mac_data.mac[i][5]);
 | 
				
			||||||
		printf("MAC %d %s\n", i, ethaddr[i]);
 | 
							printf("MAC %d %s\n", i, ethaddr[i]);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -85,7 +89,7 @@ int mac_show(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int mac_read(void)
 | 
					int mac_read(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int ret,length;
 | 
						int ret, length;
 | 
				
			||||||
	unsigned int crc = 0;
 | 
						unsigned int crc = 0;
 | 
				
			||||||
	unsigned char dev = ID_EEPROM_ADDR, *data;
 | 
						unsigned char dev = ID_EEPROM_ADDR, *data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -98,12 +102,12 @@ int mac_read(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	data = (unsigned char *)(&mac_data);
 | 
						data = (unsigned char *)(&mac_data);
 | 
				
			||||||
	printf("Check CRC on reading ...");
 | 
						printf("Check CRC on reading ...");
 | 
				
			||||||
	crc = crc32(crc, data, length-4);
 | 
						crc = crc32(crc, data, length - 4);
 | 
				
			||||||
	if (crc != mac_data.crc) {
 | 
						if (crc != mac_data.crc) {
 | 
				
			||||||
		printf("CRC checksum is invalid, in EEPROM CRC is %x, calculated CRC is %x\n",mac_data.crc,crc);
 | 
							printf("CRC checksum is invalid, in EEPROM CRC is %x, calculated CRC is %x\n",
 | 
				
			||||||
 | 
							     mac_data.crc, crc);
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	}
 | 
						} else {
 | 
				
			||||||
	else {
 | 
					 | 
				
			||||||
		printf("CRC OK\n");
 | 
							printf("CRC OK\n");
 | 
				
			||||||
		mac_show();
 | 
							mac_show();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -114,18 +118,20 @@ int mac_prog(void)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	int ret, i, length;
 | 
						int ret, i, length;
 | 
				
			||||||
	unsigned int crc = 0;
 | 
						unsigned int crc = 0;
 | 
				
			||||||
	unsigned char dev = ID_EEPROM_ADDR,*ptr;
 | 
						unsigned char dev = ID_EEPROM_ADDR, *ptr;
 | 
				
			||||||
	unsigned char * eeprom_data = (unsigned char *)(&mac_data);
 | 
						unsigned char *eeprom_data = (unsigned char *)(&mac_data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < sizeof(mac_data.res_1); i++)
 | 
						for (i = 0; i < sizeof(mac_data.res_1); i++)
 | 
				
			||||||
		mac_data.res_1[i] = 0;
 | 
							mac_data.res_1[i] = 0;
 | 
				
			||||||
	for (i = 0;i < sizeof(mac_data.res_2); i++)
 | 
						for (i = 0; i < sizeof(mac_data.res_2); i++)
 | 
				
			||||||
		mac_data.res_2[i] = 0;
 | 
							mac_data.res_2[i] = 0;
 | 
				
			||||||
	length = sizeof(EEPROM_data);
 | 
						length = sizeof(EEPROM_data);
 | 
				
			||||||
	crc = crc32 (crc, eeprom_data, length-4);
 | 
						crc = crc32(crc, eeprom_data, length - 4);
 | 
				
			||||||
	mac_data.crc = crc;
 | 
						mac_data.crc = crc;
 | 
				
			||||||
	for (i = 0, ptr = eeprom_data; i < length; i += 8, ptr += 8) {
 | 
						for (i = 0, ptr = eeprom_data; i < length; i += 8, ptr += 8) {
 | 
				
			||||||
		ret = i2c_write(dev, i, 1, ptr, (length-i) <8 ? (length-i) : 8);
 | 
							ret =
 | 
				
			||||||
 | 
							    i2c_write(dev, i, 1, ptr,
 | 
				
			||||||
 | 
								      (length - i) < 8 ? (length - i) : 8);
 | 
				
			||||||
		udelay(5000);	/* 5ms write cycle timing */
 | 
							udelay(5000);	/* 5ms write cycle timing */
 | 
				
			||||||
		if (ret)
 | 
							if (ret)
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
@ -133,24 +139,23 @@ int mac_prog(void)
 | 
				
			|||||||
	if (ret) {
 | 
						if (ret) {
 | 
				
			||||||
		printf("Programming failed.\n");
 | 
							printf("Programming failed.\n");
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	}
 | 
						} else {
 | 
				
			||||||
	else {
 | 
							printf("Programming %d bytes. Reading back ...\n", length);
 | 
				
			||||||
		printf("Programming %d bytes. Reading back ...\n",length);
 | 
					 | 
				
			||||||
		mac_read();
 | 
							mac_read();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int do_mac (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
					int do_mac(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
	char cmd = 's';
 | 
						char cmd = 's';
 | 
				
			||||||
	unsigned long long mac_val;
 | 
						unsigned long long mac_val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(i2c_probe(ID_EEPROM_ADDR) != 0)
 | 
						if (i2c_probe(ID_EEPROM_ADDR) != 0)
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(argc>1) {
 | 
						if (argc > 1) {
 | 
				
			||||||
		cmd = argv[1][0];
 | 
							cmd = argv[1][0];
 | 
				
			||||||
		switch (cmd) {
 | 
							switch (cmd) {
 | 
				
			||||||
		case 'r':	/* display */
 | 
							case 'r':	/* display */
 | 
				
			||||||
@ -160,27 +165,28 @@ int do_mac (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
				
			|||||||
			mac_prog();
 | 
								mac_prog();
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 'i':	/* id */
 | 
							case 'i':	/* id */
 | 
				
			||||||
				for (i=0; i<4; i++) {
 | 
								for (i = 0; i < 4; i++) {
 | 
				
			||||||
				mac_data.id[i] = argv[2][i];
 | 
									mac_data.id[i] = argv[2][i];
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 'n':	/* serial number */
 | 
							case 'n':	/* serial number */
 | 
				
			||||||
				for (i=0; i<12; i++) {
 | 
								for (i = 0; i < 12; i++) {
 | 
				
			||||||
				mac_data.sn[i] = argv[2][i];
 | 
									mac_data.sn[i] = argv[2][i];
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 'e':	/* errata */
 | 
							case 'e':	/* errata */
 | 
				
			||||||
				for (i=0; i<5; i++) {
 | 
								for (i = 0; i < 5; i++) {
 | 
				
			||||||
				mac_data.errata[i] = argv[2][i];
 | 
									mac_data.errata[i] = argv[2][i];
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 'd':	/* date */
 | 
							case 'd':	/* date */
 | 
				
			||||||
				for (i=0; i<7; i++) {
 | 
								for (i = 0; i < 7; i++) {
 | 
				
			||||||
				mac_data.date[i] = argv[2][i];
 | 
									mac_data.date[i] = argv[2][i];
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 'p':	/* number of ports */
 | 
							case 'p':	/* number of ports */
 | 
				
			||||||
				mac_data.tab_size = (unsigned char)simple_strtoul(argv[2],NULL,16);
 | 
								mac_data.tab_size =
 | 
				
			||||||
 | 
								    (unsigned char)simple_strtoul(argv[2], NULL, 16);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case '0':	/* mac 0 */
 | 
							case '0':	/* mac 0 */
 | 
				
			||||||
		case '1':	/* mac 1 */
 | 
							case '1':	/* mac 1 */
 | 
				
			||||||
@ -190,18 +196,19 @@ int do_mac (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
				
			|||||||
		case '5':	/* mac 5 */
 | 
							case '5':	/* mac 5 */
 | 
				
			||||||
		case '6':	/* mac 6 */
 | 
							case '6':	/* mac 6 */
 | 
				
			||||||
		case '7':	/* mac 7 */
 | 
							case '7':	/* mac 7 */
 | 
				
			||||||
				mac_val = simple_strtoull(argv[2],NULL,16);
 | 
								mac_val = simple_strtoull(argv[2], NULL, 16);
 | 
				
			||||||
				for (i=0; i<6; i++) {
 | 
								for (i = 0; i < 6; i++) {
 | 
				
			||||||
					mac_data.mac[cmd-'0'][i] = *((unsigned char *)(((unsigned int)(&mac_val))+i+2));
 | 
									mac_data.mac[cmd - '0'][i] =
 | 
				
			||||||
 | 
									    *((unsigned char *)
 | 
				
			||||||
 | 
									      (((unsigned int)(&mac_val)) + i + 2));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 'h':	/* help */
 | 
							case 'h':	/* help */
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
				printf ("Usage:\n%s\n", cmdtp->usage);
 | 
								printf("Usage:\n%s\n", cmdtp->usage);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						} else {
 | 
				
			||||||
	else {
 | 
					 | 
				
			||||||
		mac_show();
 | 
							mac_show();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
@ -209,32 +216,37 @@ int do_mac (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int mac_read_from_eeprom(void)
 | 
					int mac_read_from_eeprom(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int length,i;
 | 
						int length, i;
 | 
				
			||||||
	unsigned char dev = ID_EEPROM_ADDR, *data, ethaddr[4][18], enetvar[32];
 | 
						unsigned char dev = ID_EEPROM_ADDR;
 | 
				
			||||||
 | 
						unsigned char *data;
 | 
				
			||||||
 | 
						unsigned char ethaddr[4][18];
 | 
				
			||||||
 | 
						unsigned char enetvar[32];
 | 
				
			||||||
	unsigned int crc = 0;
 | 
						unsigned int crc = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	length = sizeof(EEPROM_data);
 | 
						length = sizeof(EEPROM_data);
 | 
				
			||||||
	if(i2c_read (dev, 0, 1, (unsigned char *)(&mac_data), length)) {
 | 
						if (i2c_read(dev, 0, 1, (unsigned char *)(&mac_data), length)) {
 | 
				
			||||||
		printf("Read failed.\n");
 | 
							printf("Read failed.\n");
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data = (unsigned char *)(&mac_data);
 | 
						data = (unsigned char *)(&mac_data);
 | 
				
			||||||
	crc = crc32(crc, data, length-4);
 | 
						crc = crc32(crc, data, length - 4);
 | 
				
			||||||
	if (crc != mac_data.crc) {
 | 
						if (crc != mac_data.crc) {
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	}
 | 
						} else {
 | 
				
			||||||
	else {
 | 
							for (i = 0; i < 4; i++) {
 | 
				
			||||||
		for(i=0; i<4; i++) {
 | 
								if (memcmp(&mac_data.mac[i], "\0\0\0\0\0\0", 6)) {
 | 
				
			||||||
			if(memcmp(&mac_data.mac[i], "\0\0\0\0\0\0", 6)) {
 | 
									sprintf(ethaddr[i],
 | 
				
			||||||
				sprintf(ethaddr[i], "%02x:%02x:%02x:%02x:%02x:%02x", \
 | 
										"%02x:%02x:%02x:%02x:%02x:%02x",
 | 
				
			||||||
					mac_data.mac[i][0], \
 | 
										mac_data.mac[i][0],
 | 
				
			||||||
					mac_data.mac[i][1], \
 | 
										mac_data.mac[i][1],
 | 
				
			||||||
					mac_data.mac[i][2], \
 | 
										mac_data.mac[i][2],
 | 
				
			||||||
					mac_data.mac[i][3], \
 | 
										mac_data.mac[i][3],
 | 
				
			||||||
					mac_data.mac[i][4], \
 | 
										mac_data.mac[i][4],
 | 
				
			||||||
					mac_data.mac[i][5]);
 | 
										mac_data.mac[i][5]);
 | 
				
			||||||
				sprintf(enetvar, i ? "eth%daddr" : "ethaddr", i);
 | 
									sprintf(enetvar,
 | 
				
			||||||
 | 
										i ? "eth%daddr" : "ethaddr",
 | 
				
			||||||
 | 
										i);
 | 
				
			||||||
				setenv(enetvar, ethaddr[i]);
 | 
									setenv(enetvar, ethaddr[i]);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -38,7 +38,8 @@ extern void mpc8641_reset_board(cmd_tbl_t *cmdtp, int flag,
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int checkcpu (void)
 | 
					int
 | 
				
			||||||
 | 
					checkcpu(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	sys_info_t sysinfo;
 | 
						sys_info_t sysinfo;
 | 
				
			||||||
	uint pvr, svr;
 | 
						uint pvr, svr;
 | 
				
			||||||
@ -97,8 +98,8 @@ int checkcpu (void)
 | 
				
			|||||||
	lcrr = CFG_LBC_LCRR;
 | 
						lcrr = CFG_LBC_LCRR;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	    volatile immap_t *immap = (immap_t *)CFG_IMMR;
 | 
							volatile immap_t *immap = (immap_t *) CFG_IMMR;
 | 
				
			||||||
	    volatile ccsr_lbc_t *lbc= &immap->im_lbc;
 | 
							volatile ccsr_lbc_t *lbc = &immap->im_lbc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		lcrr = lbc->lcrr;
 | 
							lcrr = lbc->lcrr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -126,8 +127,10 @@ soft_restart(unsigned long addr)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
#ifndef CONFIG_MPC8641HPCN
 | 
					#ifndef CONFIG_MPC8641HPCN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* SRR0 has system reset vector, SRR1 has default MSR value */
 | 
						/*
 | 
				
			||||||
	/* rfi restores MSR from SRR1 and sets the PC to the SRR0 value */
 | 
						 * SRR0 has system reset vector, SRR1 has default MSR value
 | 
				
			||||||
 | 
						 * rfi restores MSR from SRR1 and sets the PC to the SRR0 value
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	__asm__ __volatile__ ("mtspr	26, %0"		:: "r" (addr));
 | 
						__asm__ __volatile__ ("mtspr	26, %0"		:: "r" (addr));
 | 
				
			||||||
	__asm__ __volatile__ ("li	4, (1 << 6)"	::: "r4");
 | 
						__asm__ __volatile__ ("li	4, (1 << 6)"	::: "r4");
 | 
				
			||||||
@ -140,7 +143,7 @@ soft_restart(unsigned long addr)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#endif /* !CONFIG_MPC8641HPCN */
 | 
					#endif /* !CONFIG_MPC8641HPCN */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while(1);	/* not reached */
 | 
						while (1) ;		/* not reached */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -185,14 +188,15 @@ do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#endif /* !CONFIG_MPC8641HPCN */
 | 
					#endif /* !CONFIG_MPC8641HPCN */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while(1);	/* not reached */
 | 
						while (1) ;		/* not reached */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Get timebase clock frequency
 | 
					 * Get timebase clock frequency
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
unsigned long get_tbclk(void)
 | 
					unsigned long
 | 
				
			||||||
 | 
					get_tbclk(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	sys_info_t sys_info;
 | 
						sys_info_t sys_info;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -210,9 +214,10 @@ watchdog_reset(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_DDR_ECC)
 | 
					#if defined(CONFIG_DDR_ECC)
 | 
				
			||||||
void dma_init(void)
 | 
					void
 | 
				
			||||||
 | 
					dma_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	volatile immap_t *immap = (immap_t *)CFG_IMMR;
 | 
						volatile immap_t *immap = (immap_t *) CFG_IMMR;
 | 
				
			||||||
	volatile ccsr_dma_t *dma = &immap->im_dma;
 | 
						volatile ccsr_dma_t *dma = &immap->im_dma;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dma->satr0 = 0x00040000;
 | 
						dma->satr0 = 0x00040000;
 | 
				
			||||||
@ -220,26 +225,28 @@ void dma_init(void)
 | 
				
			|||||||
	asm("sync; isync");
 | 
						asm("sync; isync");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint dma_check(void)
 | 
					uint
 | 
				
			||||||
 | 
					dma_check(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	volatile immap_t *immap = (immap_t *)CFG_IMMR;
 | 
						volatile immap_t *immap = (immap_t *) CFG_IMMR;
 | 
				
			||||||
	volatile ccsr_dma_t *dma = &immap->im_dma;
 | 
						volatile ccsr_dma_t *dma = &immap->im_dma;
 | 
				
			||||||
	volatile uint status = dma->sr0;
 | 
						volatile uint status = dma->sr0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* While the channel is busy, spin */
 | 
						/* While the channel is busy, spin */
 | 
				
			||||||
	while((status & 4) == 4) {
 | 
						while ((status & 4) == 4) {
 | 
				
			||||||
		status = dma->sr0;
 | 
							status = dma->sr0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (status != 0) {
 | 
						if (status != 0) {
 | 
				
			||||||
		printf ("DMA Error: status = %x\n", status);
 | 
							printf("DMA Error: status = %x\n", status);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return status;
 | 
						return status;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int dma_xfer(void *dest, uint count, void *src)
 | 
					int
 | 
				
			||||||
 | 
					dma_xfer(void *dest, uint count, void *src)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	volatile immap_t *immap = (immap_t *)CFG_IMMR;
 | 
						volatile immap_t *immap = (immap_t *) CFG_IMMR;
 | 
				
			||||||
	volatile ccsr_dma_t *dma = &immap->im_dma;
 | 
						volatile ccsr_dma_t *dma = &immap->im_dma;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dma->dar0 = (uint) dest;
 | 
						dma->dar0 = (uint) dest;
 | 
				
			||||||
@ -256,7 +263,8 @@ int dma_xfer(void *dest, uint count, void *src)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_OF_FLAT_TREE
 | 
					#ifdef CONFIG_OF_FLAT_TREE
 | 
				
			||||||
void ft_cpu_setup(void *blob, bd_t *bd)
 | 
					void
 | 
				
			||||||
 | 
					ft_cpu_setup(void *blob, bd_t *bd)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 *p;
 | 
						u32 *p;
 | 
				
			||||||
	ulong clock;
 | 
						ulong clock;
 | 
				
			||||||
 | 
				
			|||||||
@ -61,7 +61,7 @@ i2c_init(int speed, int slaveadd)
 | 
				
			|||||||
	writeb(0x3f, I2CFDR);
 | 
						writeb(0x3f, I2CFDR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* set default filter */
 | 
						/* set default filter */
 | 
				
			||||||
	writeb(0x10,I2CDFSRR);
 | 
						writeb(0x10, I2CDFSRR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* write slave address */
 | 
						/* write slave address */
 | 
				
			||||||
	writeb(slaveadd, I2CADR);
 | 
						writeb(slaveadd, I2CADR);
 | 
				
			||||||
@ -76,7 +76,7 @@ i2c_init(int speed, int slaveadd)
 | 
				
			|||||||
static __inline__ int
 | 
					static __inline__ int
 | 
				
			||||||
i2c_wait4bus(void)
 | 
					i2c_wait4bus(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	ulong timeval = get_timer (0);
 | 
						ulong timeval = get_timer(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while (readb(I2CCSR) & MPC86xx_I2CSR_MBB) {
 | 
						while (readb(I2CCSR) & MPC86xx_I2CSR_MBB) {
 | 
				
			||||||
		if (get_timer(timeval) > TIMEOUT) {
 | 
							if (get_timer(timeval) > TIMEOUT) {
 | 
				
			||||||
@ -91,7 +91,7 @@ static __inline__ int
 | 
				
			|||||||
i2c_wait(int write)
 | 
					i2c_wait(int write)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 csr;
 | 
						u32 csr;
 | 
				
			||||||
	ulong timeval = get_timer (0);
 | 
						ulong timeval = get_timer(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	do {
 | 
						do {
 | 
				
			||||||
		csr = readb(I2CCSR);
 | 
							csr = readb(I2CCSR);
 | 
				
			||||||
@ -123,7 +123,7 @@ i2c_wait(int write)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static __inline__ int
 | 
					static __inline__ int
 | 
				
			||||||
i2c_write_addr (u8 dev, u8 dir, int rsta)
 | 
					i2c_write_addr(u8 dev, u8 dir, int rsta)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	writeb(MPC86xx_I2CCR_MEN | MPC86xx_I2CCR_MSTA | MPC86xx_I2CCR_MTX
 | 
						writeb(MPC86xx_I2CCR_MEN | MPC86xx_I2CCR_MSTA | MPC86xx_I2CCR_MTX
 | 
				
			||||||
	       | (rsta ? MPC86xx_I2CCR_RSTA : 0),
 | 
						       | (rsta ? MPC86xx_I2CCR_RSTA : 0),
 | 
				
			||||||
@ -138,7 +138,7 @@ i2c_write_addr (u8 dev, u8 dir, int rsta)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static __inline__ int
 | 
					static __inline__ int
 | 
				
			||||||
__i2c_write (u8 *data, int length)
 | 
					__i2c_write(u8 *data, int length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -156,7 +156,7 @@ __i2c_write (u8 *data, int length)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static __inline__ int
 | 
					static __inline__ int
 | 
				
			||||||
__i2c_read (u8 *data, int length)
 | 
					__i2c_read(u8 *data, int length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -174,8 +174,7 @@ __i2c_read (u8 *data, int length)
 | 
				
			|||||||
		/* Generate ack on last next to last byte */
 | 
							/* Generate ack on last next to last byte */
 | 
				
			||||||
		if (i == length - 2)
 | 
							if (i == length - 2)
 | 
				
			||||||
			writeb(MPC86xx_I2CCR_MEN | MPC86xx_I2CCR_MSTA
 | 
								writeb(MPC86xx_I2CCR_MEN | MPC86xx_I2CCR_MSTA
 | 
				
			||||||
			       | MPC86xx_I2CCR_TXAK,
 | 
								       | MPC86xx_I2CCR_TXAK, I2CCCR);
 | 
				
			||||||
			       I2CCCR);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Generate stop on last byte */
 | 
							/* Generate stop on last byte */
 | 
				
			||||||
		if (i == length - 1)
 | 
							if (i == length - 1)
 | 
				
			||||||
@ -188,10 +187,10 @@ __i2c_read (u8 *data, int length)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
i2c_read (u8 dev, uint addr, int alen, u8 *data, int length)
 | 
					i2c_read(u8 dev, uint addr, int alen, u8 *data, int length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int i = 0;
 | 
						int i = 0;
 | 
				
			||||||
	u8 *a = (u8*)&addr;
 | 
						u8 *a = (u8 *) &addr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (i2c_wait4bus() < 0)
 | 
						if (i2c_wait4bus() < 0)
 | 
				
			||||||
		goto exit;
 | 
							goto exit;
 | 
				
			||||||
@ -214,10 +213,10 @@ exit:
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
i2c_write (u8 dev, uint addr, int alen, u8 *data, int length)
 | 
					i2c_write(u8 dev, uint addr, int alen, u8 *data, int length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int i = 0;
 | 
						int i = 0;
 | 
				
			||||||
	u8 *a = (u8*)&addr;
 | 
						u8 *a = (u8 *) &addr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (i2c_wait4bus() < 0)
 | 
						if (i2c_wait4bus() < 0)
 | 
				
			||||||
		goto exit;
 | 
							goto exit;
 | 
				
			||||||
@ -236,7 +235,8 @@ exit:
 | 
				
			|||||||
	return !(i == length);
 | 
						return !(i == length);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int i2c_probe (uchar chip)
 | 
					int
 | 
				
			||||||
 | 
					i2c_probe(uchar chip)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int tmp;
 | 
						int tmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -250,7 +250,8 @@ int i2c_probe (uchar chip)
 | 
				
			|||||||
	return i2c_read(chip, 0, 1, (char *)&tmp, 1);
 | 
						return i2c_read(chip, 0, 1, (char *)&tmp, 1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uchar i2c_reg_read (uchar i2c_addr, uchar reg)
 | 
					uchar
 | 
				
			||||||
 | 
					i2c_reg_read(uchar i2c_addr, uchar reg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	char buf[1];
 | 
						char buf[1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -259,7 +260,8 @@ uchar i2c_reg_read (uchar i2c_addr, uchar reg)
 | 
				
			|||||||
	return buf[0];
 | 
						return buf[0];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void i2c_reg_write (uchar i2c_addr, uchar reg, uchar val)
 | 
					void
 | 
				
			||||||
 | 
					i2c_reg_write(uchar i2c_addr, uchar reg, uchar val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	i2c_write(i2c_addr, reg, 1, &val, 1);
 | 
						i2c_write(i2c_addr, reg, 1, &val, 1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -41,7 +41,7 @@ unsigned long decrementer_count;    /* count value for 1e6/HZ microseconds */
 | 
				
			|||||||
unsigned long timestamp;
 | 
					unsigned long timestamp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static __inline__ unsigned long get_msr (void)
 | 
					static __inline__ unsigned long get_msr(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned long msr;
 | 
						unsigned long msr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -50,12 +50,12 @@ static __inline__ unsigned long get_msr (void)
 | 
				
			|||||||
	return msr;
 | 
						return msr;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static __inline__ void set_msr (unsigned long msr)
 | 
					static __inline__ void set_msr(unsigned long msr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	asm volatile ("mtmsr %0"::"r" (msr));
 | 
						asm volatile ("mtmsr %0"::"r" (msr));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static __inline__ unsigned long get_dec (void)
 | 
					static __inline__ unsigned long get_dec(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned long val;
 | 
						unsigned long val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -64,58 +64,58 @@ static __inline__ unsigned long get_dec (void)
 | 
				
			|||||||
	return val;
 | 
						return val;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static __inline__ void set_dec(unsigned long val)
 | 
				
			||||||
static __inline__ void set_dec (unsigned long val)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (val)
 | 
						if (val)
 | 
				
			||||||
		asm volatile ("mtdec %0"::"r" (val));
 | 
							asm volatile ("mtdec %0"::"r" (val));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* interrupt is not supported yet */
 | 
					/* interrupt is not supported yet */
 | 
				
			||||||
int interrupt_init_cpu (unsigned *decrementer_count)
 | 
					int interrupt_init_cpu(unsigned *decrementer_count)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int interrupt_init(void)
 | 
				
			||||||
int interrupt_init (void)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int ret;
 | 
						int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* call cpu specific function from $(CPU)/interrupts.c */
 | 
						/* call cpu specific function from $(CPU)/interrupts.c */
 | 
				
			||||||
	ret = interrupt_init_cpu (&decrementer_count);
 | 
						ret = interrupt_init_cpu(&decrementer_count);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	decrementer_count = get_tbclk()/CFG_HZ;
 | 
						decrementer_count = get_tbclk() / CFG_HZ;
 | 
				
			||||||
	debug("interrupt init: tbclk() = %d MHz, decrementer_count = %d\n", (get_tbclk()/1000000), decrementer_count);
 | 
						debug("interrupt init: tbclk() = %d MHz, decrementer_count = %d\n",
 | 
				
			||||||
 | 
						      (get_tbclk() / 1000000),
 | 
				
			||||||
 | 
						      decrementer_count);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	set_dec (decrementer_count);
 | 
						set_dec(decrementer_count);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	set_msr (get_msr () | MSR_EE);
 | 
						set_msr(get_msr() | MSR_EE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	debug("MSR = 0x%08lx, Decrementer reg = 0x%08lx\n", get_msr(), get_dec());
 | 
						debug("MSR = 0x%08lx, Decrementer reg = 0x%08lx\n",
 | 
				
			||||||
 | 
						      get_msr(),
 | 
				
			||||||
 | 
						      get_dec());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void enable_interrupts(void)
 | 
				
			||||||
void enable_interrupts (void)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	set_msr (get_msr () | MSR_EE);
 | 
						set_msr(get_msr() | MSR_EE);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* returns flag if MSR_EE was set before */
 | 
					/* returns flag if MSR_EE was set before */
 | 
				
			||||||
int disable_interrupts (void)
 | 
					int disable_interrupts(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	ulong msr = get_msr ();
 | 
						ulong msr = get_msr();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	set_msr (msr & ~MSR_EE);
 | 
						set_msr(msr & ~MSR_EE);
 | 
				
			||||||
	return (msr & MSR_EE) != 0;
 | 
						return (msr & MSR_EE) != 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
void increment_timestamp(void)
 | 
					void increment_timestamp(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	timestamp++;
 | 
						timestamp++;
 | 
				
			||||||
@ -126,52 +126,49 @@ void increment_timestamp(void)
 | 
				
			|||||||
 * with interrupts disabled.
 | 
					 * with interrupts disabled.
 | 
				
			||||||
 * Trivial implementation - no need to be really accurate.
 | 
					 * Trivial implementation - no need to be really accurate.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void
 | 
					void timer_interrupt_cpu(struct pt_regs *regs)
 | 
				
			||||||
timer_interrupt_cpu (struct pt_regs *regs)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* nothing to do here */
 | 
						/* nothing to do here */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void timer_interrupt(struct pt_regs *regs)
 | 
				
			||||||
void timer_interrupt (struct pt_regs *regs)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* call cpu specific function from $(CPU)/interrupts.c */
 | 
						/* call cpu specific function from $(CPU)/interrupts.c */
 | 
				
			||||||
	timer_interrupt_cpu (regs);
 | 
						timer_interrupt_cpu(regs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	timestamp++;
 | 
						timestamp++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ppcDcbf(×tamp);
 | 
						ppcDcbf(×tamp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Restore Decrementer Count */
 | 
						/* Restore Decrementer Count */
 | 
				
			||||||
	set_dec (decrementer_count);
 | 
						set_dec(decrementer_count);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_WATCHDOG) || defined (CONFIG_HW_WATCHDOG)
 | 
					#if defined(CONFIG_WATCHDOG) || defined (CONFIG_HW_WATCHDOG)
 | 
				
			||||||
	if ((timestamp % (CFG_WATCHDOG_FREQ)) == 0)
 | 
						if ((timestamp % (CFG_WATCHDOG_FREQ)) == 0)
 | 
				
			||||||
		WATCHDOG_RESET ();
 | 
							WATCHDOG_RESET();
 | 
				
			||||||
#endif /* CONFIG_WATCHDOG || CONFIG_HW_WATCHDOG */
 | 
					#endif /* CONFIG_WATCHDOG || CONFIG_HW_WATCHDOG */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_STATUS_LED
 | 
					#ifdef CONFIG_STATUS_LED
 | 
				
			||||||
	status_led_tick (timestamp);
 | 
						status_led_tick(timestamp);
 | 
				
			||||||
#endif /* CONFIG_STATUS_LED */
 | 
					#endif /* CONFIG_STATUS_LED */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_SHOW_ACTIVITY
 | 
					#ifdef CONFIG_SHOW_ACTIVITY
 | 
				
			||||||
	board_show_activity (timestamp);
 | 
						board_show_activity(timestamp);
 | 
				
			||||||
#endif /* CONFIG_SHOW_ACTIVITY */
 | 
					#endif /* CONFIG_SHOW_ACTIVITY */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void reset_timer (void)
 | 
					void reset_timer(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	timestamp = 0;
 | 
						timestamp = 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ulong get_timer (ulong base)
 | 
					ulong get_timer(ulong base)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return timestamp - base;
 | 
						return timestamp - base;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void set_timer (ulong t)
 | 
					void set_timer(ulong t)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	timestamp = t;
 | 
						timestamp = t;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -180,24 +177,20 @@ void set_timer (ulong t)
 | 
				
			|||||||
 * Install and free a interrupt handler. Not implemented yet.
 | 
					 * Install and free a interrupt handler. Not implemented yet.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void irq_install_handler(int vec, interrupt_handler_t *handler, void *arg)
 | 
				
			||||||
irq_install_handler(int vec, interrupt_handler_t *handler, void *arg)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void irq_free_handler(int vec)
 | 
				
			||||||
irq_free_handler(int vec)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * irqinfo - print information about PCI devices,not implemented.
 | 
					 * irqinfo - print information about PCI devices,not implemented.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int
 | 
					int do_irqinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
				
			||||||
do_irqinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	printf ("\nInterrupt-unsupported:\n");
 | 
						printf("\nInterrupt-unsupported:\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -205,14 +198,7 @@ do_irqinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * Handle external interrupts
 | 
					 * Handle external interrupts
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void
 | 
					void external_interrupt(struct pt_regs *regs)
 | 
				
			||||||
external_interrupt(struct pt_regs *regs)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	puts("external_interrupt (oops!)\n");
 | 
						puts("external_interrupt (oops!)\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -34,7 +34,7 @@
 | 
				
			|||||||
void
 | 
					void
 | 
				
			||||||
pci_mpc86xx_init(struct pci_controller *hose)
 | 
					pci_mpc86xx_init(struct pci_controller *hose)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	volatile immap_t    *immap = (immap_t *)CFG_CCSRBAR;
 | 
						volatile immap_t *immap = (immap_t *) CFG_CCSRBAR;
 | 
				
			||||||
	volatile ccsr_pex_t *pcie1 = &immap->im_pex1;
 | 
						volatile ccsr_pex_t *pcie1 = &immap->im_pex1;
 | 
				
			||||||
	u16 temp16;
 | 
						u16 temp16;
 | 
				
			||||||
	u32 temp32;
 | 
						u32 temp32;
 | 
				
			||||||
@ -46,47 +46,54 @@ pci_mpc86xx_init(struct pci_controller *hose)
 | 
				
			|||||||
	uint devdisr = gur->devdisr;
 | 
						uint devdisr = gur->devdisr;
 | 
				
			||||||
	uint io_sel = (gur->pordevsr & MPC86xx_PORDEVSR_IO_SEL) >> 16;
 | 
						uint io_sel = (gur->pordevsr & MPC86xx_PORDEVSR_IO_SEL) >> 16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((io_sel ==2 || io_sel == 3 || io_sel == 5 || io_sel == 6 ||
 | 
						if ((io_sel == 2 || io_sel == 3 || io_sel == 5 || io_sel == 6 ||
 | 
				
			||||||
	    io_sel == 7 || io_sel == 0xf) && !(devdisr & MPC86xx_DEVDISR_PCIEX1)){
 | 
						     io_sel == 7 || io_sel == 0xf)
 | 
				
			||||||
		printf ("PCI-EXPRESS 1: Configured as %s \n",
 | 
						    && !(devdisr & MPC86xx_DEVDISR_PCIEX1)) {
 | 
				
			||||||
 | 
							printf("PCI-EXPRESS 1: Configured as %s \n",
 | 
				
			||||||
		       pcie1_agent ? "Agent" : "Host");
 | 
							       pcie1_agent ? "Agent" : "Host");
 | 
				
			||||||
		if(pcie1_agent) return; /*Don't scan bus when configured as agent*/
 | 
							if (pcie1_agent)
 | 
				
			||||||
		printf ("               Scanning PCIE bus");
 | 
								return;	/*Don't scan bus when configured as agent */
 | 
				
			||||||
		debug("0x%08x=0x%08x ", &pcie1->pme_msg_det,pcie1->pme_msg_det);
 | 
							printf("               Scanning PCIE bus");
 | 
				
			||||||
 | 
							debug("0x%08x=0x%08x ",
 | 
				
			||||||
 | 
							      &pcie1->pme_msg_det,
 | 
				
			||||||
 | 
							      pcie1->pme_msg_det);
 | 
				
			||||||
		if (pcie1->pme_msg_det) {
 | 
							if (pcie1->pme_msg_det) {
 | 
				
			||||||
			pcie1->pme_msg_det = 0xffffffff;
 | 
								pcie1->pme_msg_det = 0xffffffff;
 | 
				
			||||||
			debug (" with errors.  Clearing.  Now 0x%08x",
 | 
								debug(" with errors.  Clearing.  Now 0x%08x",
 | 
				
			||||||
			      pcie1->pme_msg_det);
 | 
								      pcie1->pme_msg_det);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		debug ("\n");
 | 
							debug("\n");
 | 
				
			||||||
	}
 | 
						} else {
 | 
				
			||||||
	else{
 | 
					 | 
				
			||||||
		printf("PCI-EXPRESS 1 disabled!\n");
 | 
							printf("PCI-EXPRESS 1 disabled!\n");
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*set first_bus=0 only skipped B0:D0:F0 which is
 | 
						/*
 | 
				
			||||||
 | 
						 * Set first_bus=0 only skipped B0:D0:F0 which is
 | 
				
			||||||
	 * a reserved device in M1575, but make it easy for
 | 
						 * a reserved device in M1575, but make it easy for
 | 
				
			||||||
	 * most of the scan process.
 | 
						 * most of the scan process.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	hose->first_busno = 0x00;
 | 
						hose->first_busno = 0x00;
 | 
				
			||||||
	hose->last_busno = 0xfe;
 | 
						hose->last_busno = 0xfe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pcie_setup_indirect(hose,
 | 
						pcie_setup_indirect(hose, (CFG_IMMR + 0x8000), (CFG_IMMR + 0x8004));
 | 
				
			||||||
			   (CFG_IMMR+0x8000),
 | 
					 | 
				
			||||||
			   (CFG_IMMR+0x8004));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pci_hose_read_config_word(hose, PCI_BDF(0,0,0), PCI_COMMAND, &temp16);
 | 
						pci_hose_read_config_word(hose,
 | 
				
			||||||
 | 
									  PCI_BDF(0, 0, 0), PCI_COMMAND, &temp16);
 | 
				
			||||||
	temp16 |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER |
 | 
						temp16 |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER |
 | 
				
			||||||
	    PCI_COMMAND_MEMORY | PCI_COMMAND_IO;
 | 
						    PCI_COMMAND_MEMORY | PCI_COMMAND_IO;
 | 
				
			||||||
	pci_hose_write_config_word(hose, PCI_BDF(0,0,0), PCI_COMMAND, temp16);
 | 
						pci_hose_write_config_word(hose,
 | 
				
			||||||
 | 
									   PCI_BDF(0, 0, 0), PCI_COMMAND, temp16);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pci_hose_write_config_word(hose,PCI_BDF(0,0,0), PCI_STATUS, 0xffff);
 | 
						pci_hose_write_config_word(hose, PCI_BDF(0, 0, 0), PCI_STATUS, 0xffff);
 | 
				
			||||||
	pci_hose_write_config_byte(hose, PCI_BDF(0,0,0), PCI_LATENCY_TIMER, 0x80);
 | 
						pci_hose_write_config_byte(hose,
 | 
				
			||||||
 | 
									   PCI_BDF(0, 0, 0), PCI_LATENCY_TIMER, 0x80);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pci_hose_read_config_dword(hose, PCI_BDF(0,0,0), PCI_PRIMARY_BUS, &temp32);
 | 
						pci_hose_read_config_dword(hose, PCI_BDF(0, 0, 0), PCI_PRIMARY_BUS,
 | 
				
			||||||
 | 
									   &temp32);
 | 
				
			||||||
	temp32 = (temp32 & 0xff000000) | (0xff) | (0x0 << 8) | (0xfe << 16);
 | 
						temp32 = (temp32 & 0xff000000) | (0xff) | (0x0 << 8) | (0xfe << 16);
 | 
				
			||||||
	pci_hose_write_config_dword(hose, PCI_BDF(0,0,0), PCI_PRIMARY_BUS, temp32);
 | 
						pci_hose_write_config_dword(hose, PCI_BDF(0, 0, 0), PCI_PRIMARY_BUS,
 | 
				
			||||||
 | 
									    temp32);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pcie1->powar1 = 0;
 | 
						pcie1->powar1 = 0;
 | 
				
			||||||
	pcie1->powar2 = 0;
 | 
						pcie1->powar2 = 0;
 | 
				
			||||||
@ -131,8 +138,8 @@ pci_mpc86xx_init(struct pci_controller *hose)
 | 
				
			|||||||
	pci_register_hose(hose);
 | 
						pci_register_hose(hose);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hose->last_busno = pci_hose_scan(hose);
 | 
						hose->last_busno = pci_hose_scan(hose);
 | 
				
			||||||
	debug("pcie_mpc86xx_init: last_busno %x\n",hose->last_busno);
 | 
						debug("pcie_mpc86xx_init: last_busno %x\n", hose->last_busno);
 | 
				
			||||||
	debug("pcie_mpc86xx init: current_busno %x\n ",hose->current_busno);
 | 
						debug("pcie_mpc86xx init: current_busno %x\n ", hose->current_busno);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printf("....PCIE1 scan & enumeration done\n");
 | 
						printf("....PCIE1 scan & enumeration done\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -28,20 +28,23 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
indirect_read_config_pcie(struct pci_controller *hose,
 | 
					indirect_read_config_pcie(struct pci_controller *hose,
 | 
				
			||||||
		 	 pci_dev_t dev, int offset,
 | 
								  pci_dev_t dev,
 | 
				
			||||||
			 int len,u32 *val)
 | 
								  int offset,
 | 
				
			||||||
 | 
								  int len,
 | 
				
			||||||
 | 
								  u32 *val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int bus = PCI_BUS(dev);
 | 
						int bus = PCI_BUS(dev);
 | 
				
			||||||
	char devfn = ( (PCI_DEV(dev) << 4 ) | (PCI_FUNC(dev)) ) ;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	unsigned char *cfg_data;
 | 
						volatile unsigned char *cfg_data;
 | 
				
			||||||
	u32 temp;
 | 
						u32 temp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	PEX_FIX;
 | 
						PEX_FIX;
 | 
				
			||||||
	if( bus == 0xff) {
 | 
						if (bus == 0xff) {
 | 
				
			||||||
		PCI_CFG_OUT(hose->cfg_addr, dev | (offset & 0xfc) | 0x80000001);
 | 
							PCI_CFG_OUT(hose->cfg_addr,
 | 
				
			||||||
	}else {
 | 
								    dev | (offset & 0xfc) | 0x80000001);
 | 
				
			||||||
		PCI_CFG_OUT(hose->cfg_addr, dev | (offset & 0xfc) | 0x80000000);
 | 
						} else {
 | 
				
			||||||
 | 
							PCI_CFG_OUT(hose->cfg_addr,
 | 
				
			||||||
 | 
								    dev | (offset & 0xfc) | 0x80000000);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * Note: the caller has already checked that offset is
 | 
						 * Note: the caller has already checked that offset is
 | 
				
			||||||
@ -50,13 +53,13 @@ indirect_read_config_pcie(struct pci_controller *hose,
 | 
				
			|||||||
	/* ERRATA PCI-Ex 12 - Configuration Address/Data Alignment */
 | 
						/* ERRATA PCI-Ex 12 - Configuration Address/Data Alignment */
 | 
				
			||||||
	cfg_data = hose->cfg_data;
 | 
						cfg_data = hose->cfg_data;
 | 
				
			||||||
	PEX_FIX;
 | 
						PEX_FIX;
 | 
				
			||||||
	temp = in_le32(cfg_data);
 | 
						temp = in_le32((u32 *) cfg_data);
 | 
				
			||||||
	switch (len) {
 | 
						switch (len) {
 | 
				
			||||||
	case 1:
 | 
						case 1:
 | 
				
			||||||
		*val = (temp >> (((offset & 3))*8)) & 0xff;
 | 
							*val = (temp >> (((offset & 3)) * 8)) & 0xff;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 2:
 | 
						case 2:
 | 
				
			||||||
		*val = (temp >> (((offset & 3))*8)) & 0xffff;
 | 
							*val = (temp >> (((offset & 3)) * 8)) & 0xffff;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		*val = temp;
 | 
							*val = temp;
 | 
				
			||||||
@ -74,16 +77,16 @@ indirect_write_config_pcie(struct pci_controller *hose,
 | 
				
			|||||||
			   u32 val)
 | 
								   u32 val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int bus = PCI_BUS(dev);
 | 
						int bus = PCI_BUS(dev);
 | 
				
			||||||
	char devfn = ( (PCI_DEV(dev) << 4 ) | (PCI_FUNC(dev)) ) ;
 | 
						volatile unsigned char *cfg_data;
 | 
				
			||||||
 | 
					 | 
				
			||||||
	unsigned char *cfg_data;
 | 
					 | 
				
			||||||
	u32 temp;
 | 
						u32 temp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	PEX_FIX;
 | 
						PEX_FIX;
 | 
				
			||||||
	if( bus == 0xff) {
 | 
						if (bus == 0xff) {
 | 
				
			||||||
		PCI_CFG_OUT(hose->cfg_addr, dev | (offset & 0xfc) | 0x80000001);
 | 
							PCI_CFG_OUT(hose->cfg_addr,
 | 
				
			||||||
	}else {
 | 
								    dev | (offset & 0xfc) | 0x80000001);
 | 
				
			||||||
		PCI_CFG_OUT(hose->cfg_addr, dev | (offset & 0xfc) | 0x80000000);
 | 
						} else {
 | 
				
			||||||
 | 
							PCI_CFG_OUT(hose->cfg_addr,
 | 
				
			||||||
 | 
								    dev | (offset & 0xfc) | 0x80000000);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
@ -95,23 +98,23 @@ indirect_write_config_pcie(struct pci_controller *hose,
 | 
				
			|||||||
	switch (len) {
 | 
						switch (len) {
 | 
				
			||||||
	case 1:
 | 
						case 1:
 | 
				
			||||||
		PEX_FIX;
 | 
							PEX_FIX;
 | 
				
			||||||
		temp = in_le32(cfg_data);
 | 
							temp = in_le32((u32 *) cfg_data);
 | 
				
			||||||
		temp = (temp & ~(0xff << ((offset & 3) * 8))) |
 | 
							temp = (temp & ~(0xff << ((offset & 3) * 8))) |
 | 
				
			||||||
		    (val << ((offset & 3) * 8));
 | 
							    (val << ((offset & 3) * 8));
 | 
				
			||||||
		PEX_FIX;
 | 
							PEX_FIX;
 | 
				
			||||||
		out_le32(cfg_data, temp);
 | 
							out_le32((u32 *) cfg_data, temp);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 2:
 | 
						case 2:
 | 
				
			||||||
		PEX_FIX;
 | 
							PEX_FIX;
 | 
				
			||||||
		temp = in_le32(cfg_data);
 | 
							temp = in_le32((u32 *) cfg_data);
 | 
				
			||||||
		temp = (temp & ~(0xffff << ((offset & 3) * 8)));
 | 
							temp = (temp & ~(0xffff << ((offset & 3) * 8)));
 | 
				
			||||||
		temp |= (val << ((offset & 3) * 8)) ;
 | 
							temp |= (val << ((offset & 3) * 8));
 | 
				
			||||||
		PEX_FIX;
 | 
							PEX_FIX;
 | 
				
			||||||
		out_le32(cfg_data, temp);
 | 
							out_le32((u32 *) cfg_data, temp);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		PEX_FIX;
 | 
							PEX_FIX;
 | 
				
			||||||
		out_le32(cfg_data, val);
 | 
							out_le32((u32 *) cfg_data, val);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	PEX_FIX;
 | 
						PEX_FIX;
 | 
				
			||||||
@ -125,8 +128,8 @@ indirect_read_config_byte_pcie(struct pci_controller *hose,
 | 
				
			|||||||
			       u8 *val)
 | 
								       u8 *val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 val32;
 | 
						u32 val32;
 | 
				
			||||||
	indirect_read_config_pcie(hose,dev,offset,1,&val32);
 | 
						indirect_read_config_pcie(hose, dev, offset, 1, &val32);
 | 
				
			||||||
	*val = (u8)val32;
 | 
						*val = (u8) val32;
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -137,8 +140,8 @@ indirect_read_config_word_pcie(struct pci_controller *hose,
 | 
				
			|||||||
			       u16 *val)
 | 
								       u16 *val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 val32;
 | 
						u32 val32;
 | 
				
			||||||
	indirect_read_config_pcie(hose,dev,offset,2,&val32);
 | 
						indirect_read_config_pcie(hose, dev, offset, 2, &val32);
 | 
				
			||||||
	*val = (u16)val32;
 | 
						*val = (u16) val32;
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -148,16 +151,16 @@ indirect_read_config_dword_pcie(struct pci_controller *hose,
 | 
				
			|||||||
				int offset,
 | 
									int offset,
 | 
				
			||||||
				u32 *val)
 | 
									u32 *val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return indirect_read_config_pcie(hose,dev, offset,4,val);
 | 
						return indirect_read_config_pcie(hose, dev, offset, 4, val);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
indirect_write_config_byte_pcie(struct pci_controller *hose,
 | 
					indirect_write_config_byte_pcie(struct pci_controller *hose,
 | 
				
			||||||
				pci_dev_t dev,
 | 
									pci_dev_t dev,
 | 
				
			||||||
				int offset,
 | 
									int offset,
 | 
				
			||||||
			       char val)
 | 
									u8 val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return indirect_write_config_pcie(hose,dev, offset,1,(u32)val);
 | 
						return indirect_write_config_pcie(hose, dev, offset, 1, (u32) val);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
@ -166,22 +169,20 @@ indirect_write_config_word_pcie(struct pci_controller *hose,
 | 
				
			|||||||
				int offset,
 | 
									int offset,
 | 
				
			||||||
				unsigned short val)
 | 
									unsigned short val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return indirect_write_config_pcie(hose,dev, offset,2,(u32)val);
 | 
						return indirect_write_config_pcie(hose, dev, offset, 2, (u32) val);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
indirect_write_config_dword_pcie(struct pci_controller *hose,
 | 
					indirect_write_config_dword_pcie(struct pci_controller *hose,
 | 
				
			||||||
				 pci_dev_t dev,
 | 
									 pci_dev_t dev,
 | 
				
			||||||
				 int offset,
 | 
									 int offset,
 | 
				
			||||||
			        unsigned short val)
 | 
									 u32 val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return indirect_write_config_pcie(hose,dev, offset,4,val);
 | 
						return indirect_write_config_pcie(hose, dev, offset, 4, val);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
pcie_setup_indirect(struct pci_controller* hose,
 | 
					pcie_setup_indirect(struct pci_controller *hose, u32 cfg_addr, u32 cfg_data)
 | 
				
			||||||
		   u32 cfg_addr,
 | 
					 | 
				
			||||||
		   u32 cfg_data)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	pci_set_ops(hose,
 | 
						pci_set_ops(hose,
 | 
				
			||||||
		    indirect_read_config_byte_pcie,
 | 
							    indirect_read_config_byte_pcie,
 | 
				
			||||||
@ -191,8 +192,8 @@ pcie_setup_indirect(struct pci_controller* hose,
 | 
				
			|||||||
		    indirect_write_config_word_pcie,
 | 
							    indirect_write_config_word_pcie,
 | 
				
			||||||
		    indirect_write_config_dword_pcie);
 | 
							    indirect_write_config_dword_pcie);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hose->cfg_addr = (unsigned int *) cfg_addr;
 | 
						hose->cfg_addr = (unsigned int *)cfg_addr;
 | 
				
			||||||
	hose->cfg_data = (unsigned char *) cfg_data;
 | 
						hose->cfg_data = (unsigned char *)cfg_data;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif				/* CONFIG_PCI */
 | 
					#endif				/* CONFIG_PCI */
 | 
				
			||||||
 | 
				
			|||||||
@ -30,16 +30,16 @@
 | 
				
			|||||||
#include <asm/processor.h>
 | 
					#include <asm/processor.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void get_sys_info (sys_info_t *sysInfo)
 | 
					void get_sys_info(sys_info_t *sysInfo)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	volatile immap_t    *immap = (immap_t *)CFG_IMMR;
 | 
						volatile immap_t *immap = (immap_t *) CFG_IMMR;
 | 
				
			||||||
	volatile ccsr_gur_t *gur = &immap->im_gur;
 | 
						volatile ccsr_gur_t *gur = &immap->im_gur;
 | 
				
			||||||
	uint plat_ratio, e600_ratio;
 | 
						uint plat_ratio, e600_ratio;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	plat_ratio = (gur->porpllsr) & 0x0000003e;
 | 
						plat_ratio = (gur->porpllsr) & 0x0000003e;
 | 
				
			||||||
	plat_ratio >>= 1;
 | 
						plat_ratio >>= 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch(plat_ratio) {
 | 
						switch (plat_ratio) {
 | 
				
			||||||
	case 0x0:
 | 
						case 0x0:
 | 
				
			||||||
		sysInfo->freqSystemBus = 16 * CONFIG_SYS_CLK_FREQ;
 | 
							sysInfo->freqSystemBus = 16 * CONFIG_SYS_CLK_FREQ;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
@ -68,19 +68,19 @@ void get_sys_info (sys_info_t *sysInfo)
 | 
				
			|||||||
		sysInfo->freqProcessor = 2 * sysInfo->freqSystemBus;
 | 
							sysInfo->freqProcessor = 2 * sysInfo->freqSystemBus;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 0x19:
 | 
						case 0x19:
 | 
				
			||||||
		sysInfo->freqProcessor = 5 * sysInfo->freqSystemBus/2;
 | 
							sysInfo->freqProcessor = 5 * sysInfo->freqSystemBus / 2;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 0x20:
 | 
						case 0x20:
 | 
				
			||||||
		sysInfo->freqProcessor = 3 * sysInfo->freqSystemBus;
 | 
							sysInfo->freqProcessor = 3 * sysInfo->freqSystemBus;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 0x39:
 | 
						case 0x39:
 | 
				
			||||||
		sysInfo->freqProcessor = 7 * sysInfo->freqSystemBus/2;
 | 
							sysInfo->freqProcessor = 7 * sysInfo->freqSystemBus / 2;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 0x28:
 | 
						case 0x28:
 | 
				
			||||||
		sysInfo->freqProcessor = 4 * sysInfo->freqSystemBus;
 | 
							sysInfo->freqProcessor = 4 * sysInfo->freqSystemBus;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 0x1d:
 | 
						case 0x1d:
 | 
				
			||||||
		sysInfo->freqProcessor = 9 * sysInfo->freqSystemBus/2;
 | 
							sysInfo->freqProcessor = 9 * sysInfo->freqSystemBus / 2;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		sysInfo->freqProcessor = e600_ratio + sysInfo->freqSystemBus;
 | 
							sysInfo->freqProcessor = e600_ratio + sysInfo->freqSystemBus;
 | 
				
			||||||
 | 
				
			|||||||
@ -662,142 +662,140 @@ get_svr:
 | 
				
			|||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					/*
 | 
				
			||||||
/* Function:	 in8 */
 | 
					 * Function:	 in8
 | 
				
			||||||
/* Description:	 Input 8 bits */
 | 
					 * Description:	 Input 8 bits
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					 */
 | 
				
			||||||
	.globl	in8
 | 
						.globl	in8
 | 
				
			||||||
in8:
 | 
					in8:
 | 
				
			||||||
	lbz	r3,0x0000(r3)
 | 
						lbz	r3,0x0000(r3)
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					/*
 | 
				
			||||||
/* Function:	 out8 */
 | 
					 * Function:	 out8
 | 
				
			||||||
/* Description:	 Output 8 bits */
 | 
					 * Description:	 Output 8 bits
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					 */
 | 
				
			||||||
	.globl	out8
 | 
						.globl	out8
 | 
				
			||||||
out8:
 | 
					out8:
 | 
				
			||||||
	stb	r4,0x0000(r3)
 | 
						stb	r4,0x0000(r3)
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					/*
 | 
				
			||||||
/* Function:	 out16 */
 | 
					 * Function:	 out16
 | 
				
			||||||
/* Description:	 Output 16 bits */
 | 
					 * Description:	 Output 16 bits
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					 */
 | 
				
			||||||
	.globl	out16
 | 
						.globl	out16
 | 
				
			||||||
out16:
 | 
					out16:
 | 
				
			||||||
	sth	r4,0x0000(r3)
 | 
						sth	r4,0x0000(r3)
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					/*
 | 
				
			||||||
/* Function:	 out16r */
 | 
					 * Function:	 out16r
 | 
				
			||||||
/* Description:	 Byte reverse and output 16 bits */
 | 
					 * Description:	 Byte reverse and output 16 bits
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					 */
 | 
				
			||||||
	.globl	out16r
 | 
						.globl	out16r
 | 
				
			||||||
out16r:
 | 
					out16r:
 | 
				
			||||||
	sthbrx	r4,r0,r3
 | 
						sthbrx	r4,r0,r3
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					/*
 | 
				
			||||||
/* Function:	 out32 */
 | 
					 * Function:	 out32
 | 
				
			||||||
/* Description:	 Output 32 bits */
 | 
					 * Description:	 Output 32 bits
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					 */
 | 
				
			||||||
	.globl	out32
 | 
						.globl	out32
 | 
				
			||||||
out32:
 | 
					out32:
 | 
				
			||||||
	stw	r4,0x0000(r3)
 | 
						stw	r4,0x0000(r3)
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					/*
 | 
				
			||||||
/* Function:	 out32r */
 | 
					 * Function:	 out32r
 | 
				
			||||||
/* Description:	 Byte reverse and output 32 bits */
 | 
					 * Description:	 Byte reverse and output 32 bits
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					 */
 | 
				
			||||||
	.globl	out32r
 | 
						.globl	out32r
 | 
				
			||||||
out32r:
 | 
					out32r:
 | 
				
			||||||
	stwbrx	r4,r0,r3
 | 
						stwbrx	r4,r0,r3
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					/*
 | 
				
			||||||
/* Function:	 in16 */
 | 
					 * Function:	 in16
 | 
				
			||||||
/* Description:	 Input 16 bits */
 | 
					 * Description:	 Input 16 bits
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					 */
 | 
				
			||||||
	.globl	in16
 | 
						.globl	in16
 | 
				
			||||||
in16:
 | 
					in16:
 | 
				
			||||||
	lhz	r3,0x0000(r3)
 | 
						lhz	r3,0x0000(r3)
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					/*
 | 
				
			||||||
/* Function:	 in16r */
 | 
					 * Function:	 in16r
 | 
				
			||||||
/* Description:	 Input 16 bits and byte reverse */
 | 
					 * Description:	 Input 16 bits and byte reverse
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					 */
 | 
				
			||||||
	.globl	in16r
 | 
						.globl	in16r
 | 
				
			||||||
in16r:
 | 
					in16r:
 | 
				
			||||||
	lhbrx	r3,r0,r3
 | 
						lhbrx	r3,r0,r3
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					/*
 | 
				
			||||||
/* Function:	 in32 */
 | 
					 * Function:	 in32
 | 
				
			||||||
/* Description:	 Input 32 bits */
 | 
					 * Description:	 Input 32 bits
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					 */
 | 
				
			||||||
	.globl	in32
 | 
						.globl	in32
 | 
				
			||||||
in32:
 | 
					in32:
 | 
				
			||||||
	lwz	3,0x0000(3)
 | 
						lwz	3,0x0000(3)
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					/*
 | 
				
			||||||
/* Function:	 in32r */
 | 
					 * Function:	 in32r
 | 
				
			||||||
/* Description:	 Input 32 bits and byte reverse */
 | 
					 * Description:	 Input 32 bits and byte reverse
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					 */
 | 
				
			||||||
	.globl	in32r
 | 
						.globl	in32r
 | 
				
			||||||
in32r:
 | 
					in32r:
 | 
				
			||||||
	lwbrx	r3,r0,r3
 | 
						lwbrx	r3,r0,r3
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					/*
 | 
				
			||||||
/* Function:	 ppcDcbf */
 | 
					 * Function:	 ppcDcbf
 | 
				
			||||||
/* Description:	 Data Cache block flush */
 | 
					 * Description:	 Data Cache block flush
 | 
				
			||||||
/* Input:	 r3 = effective address */
 | 
					 * Input:	 r3 = effective address
 | 
				
			||||||
/* Output:	 none. */
 | 
					 * Output:	 none.
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					 */
 | 
				
			||||||
	.globl	ppcDcbf
 | 
						.globl	ppcDcbf
 | 
				
			||||||
ppcDcbf:
 | 
					ppcDcbf:
 | 
				
			||||||
	dcbf	r0,r3
 | 
						dcbf	r0,r3
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					/*
 | 
				
			||||||
/* Function:	 ppcDcbi */
 | 
					 * Function:	 ppcDcbi
 | 
				
			||||||
/* Description:	 Data Cache block Invalidate */
 | 
					 * Description:	 Data Cache block Invalidate
 | 
				
			||||||
/* Input:	 r3 = effective address */
 | 
					 * Input:	 r3 = effective address
 | 
				
			||||||
/* Output:	 none. */
 | 
					 * Output:	 none.
 | 
				
			||||||
/*------------------------------------------------------------------------------- */
 | 
					 */
 | 
				
			||||||
	.globl	ppcDcbi
 | 
						.globl	ppcDcbi
 | 
				
			||||||
ppcDcbi:
 | 
					ppcDcbi:
 | 
				
			||||||
	dcbi	r0,r3
 | 
						dcbi	r0,r3
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*--------------------------------------------------------------------------
 | 
					/*
 | 
				
			||||||
 * Function:	 ppcDcbz
 | 
					 * Function:	 ppcDcbz
 | 
				
			||||||
 * Description:	 Data Cache block zero.
 | 
					 * Description:	 Data Cache block zero.
 | 
				
			||||||
 * Input:	 r3 = effective address
 | 
					 * Input:	 r3 = effective address
 | 
				
			||||||
 * Output:	 none.
 | 
					 * Output:	 none.
 | 
				
			||||||
 *-------------------------------------------------------------------------- */
 | 
					 */
 | 
				
			||||||
 | 
					 | 
				
			||||||
	.globl	ppcDcbz
 | 
						.globl	ppcDcbz
 | 
				
			||||||
ppcDcbz:
 | 
					ppcDcbz:
 | 
				
			||||||
	dcbz	r0,r3
 | 
						dcbz	r0,r3
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*-------------------------------------------------------------------------- */
 | 
					/*
 | 
				
			||||||
/* Function:	 ppcSync */
 | 
					 * Function:	 ppcSync
 | 
				
			||||||
/* Description:	 Processor Synchronize */
 | 
					 * Description:	 Processor Synchronize
 | 
				
			||||||
/* Input:	 none. */
 | 
					 * Input:	 none.
 | 
				
			||||||
/* Output:	 none. */
 | 
					 * Output:	 none.
 | 
				
			||||||
/*-------------------------------------------------------------------------- */
 | 
					 */
 | 
				
			||||||
	.globl	ppcSync
 | 
						.globl	ppcSync
 | 
				
			||||||
ppcSync:
 | 
					ppcSync:
 | 
				
			||||||
	sync
 | 
						sync
 | 
				
			||||||
	blr
 | 
						blr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*-----------------------------------------------------------------------*/
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * void relocate_code (addr_sp, gd, addr_moni)
 | 
					 * void relocate_code (addr_sp, gd, addr_moni)
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
@ -1205,7 +1203,6 @@ secondary_cpu_setup:
 | 
				
			|||||||
        bl      icache_enable
 | 
					        bl      icache_enable
 | 
				
			||||||
        sync
 | 
					        sync
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
        /* TBEN  in HID0 */
 | 
					        /* TBEN  in HID0 */
 | 
				
			||||||
	mfspr	r4, HID0
 | 
						mfspr	r4, HID0
 | 
				
			||||||
        oris    r4, r4, 0x0400
 | 
					        oris    r4, r4, 0x0400
 | 
				
			||||||
 | 
				
			|||||||
@ -57,21 +57,22 @@ print_backtrace(unsigned long *sp)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	printf("Call backtrace: ");
 | 
						printf("Call backtrace: ");
 | 
				
			||||||
	while (sp) {
 | 
						while (sp) {
 | 
				
			||||||
		if ((uint)sp > END_OF_MEM)
 | 
							if ((uint) sp > END_OF_MEM)
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		i = sp[1];
 | 
							i = sp[1];
 | 
				
			||||||
		if (cnt++ % 7 == 0)
 | 
							if (cnt++ % 7 == 0)
 | 
				
			||||||
			printf("\n");
 | 
								printf("\n");
 | 
				
			||||||
		printf("%08lX ", i);
 | 
							printf("%08lX ", i);
 | 
				
			||||||
		if (cnt > 32) break;
 | 
							if (cnt > 32)
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
		sp = (unsigned long *)*sp;
 | 
							sp = (unsigned long *)*sp;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	printf("\n");
 | 
						printf("\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
show_regs(struct pt_regs * regs)
 | 
					show_regs(struct pt_regs *regs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -80,21 +81,19 @@ show_regs(struct pt_regs * regs)
 | 
				
			|||||||
	       regs->nip, regs->xer, regs->link, regs, regs->trap, regs->dar);
 | 
						       regs->nip, regs->xer, regs->link, regs, regs->trap, regs->dar);
 | 
				
			||||||
	printf("MSR: %08lx EE: %01x PR: %01x FP:"
 | 
						printf("MSR: %08lx EE: %01x PR: %01x FP:"
 | 
				
			||||||
	       " %01x ME: %01x IR/DR: %01x%01x\n",
 | 
						       " %01x ME: %01x IR/DR: %01x%01x\n",
 | 
				
			||||||
	       regs->msr, regs->msr&MSR_EE ? 1 : 0, regs->msr&MSR_PR ? 1 : 0,
 | 
						       regs->msr, regs->msr & MSR_EE ? 1 : 0,
 | 
				
			||||||
	       regs->msr & MSR_FP ? 1 : 0,regs->msr&MSR_ME ? 1 : 0,
 | 
						       regs->msr & MSR_PR ? 1 : 0, regs->msr & MSR_FP ? 1 : 0,
 | 
				
			||||||
	       regs->msr&MSR_IR ? 1 : 0,
 | 
						       regs->msr & MSR_ME ? 1 : 0, regs->msr & MSR_IR ? 1 : 0,
 | 
				
			||||||
	       regs->msr&MSR_DR ? 1 : 0);
 | 
						       regs->msr & MSR_DR ? 1 : 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printf("\n");
 | 
						printf("\n");
 | 
				
			||||||
	for (i = 0; i < 32; i++) {
 | 
						for (i = 0; i < 32; i++) {
 | 
				
			||||||
		if ((i % 8) == 0)
 | 
							if ((i % 8) == 0) {
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			printf("GPR%02d: ", i);
 | 
								printf("GPR%02d: ", i);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		printf("%08lX ", regs->gpr[i]);
 | 
							printf("%08lX ", regs->gpr[i]);
 | 
				
			||||||
		if ((i % 8) == 7)
 | 
							if ((i % 8) == 7) {
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			printf("\n");
 | 
								printf("\n");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -106,7 +105,7 @@ _exception(int signr, struct pt_regs *regs)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	show_regs(regs);
 | 
						show_regs(regs);
 | 
				
			||||||
	print_backtrace((unsigned long *)regs->gpr[1]);
 | 
						print_backtrace((unsigned long *)regs->gpr[1]);
 | 
				
			||||||
	panic("Exception in kernel pc %lx signal %d",regs->nip,signr);
 | 
						panic("Exception in kernel pc %lx signal %d", regs->nip, signr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@ -124,25 +123,25 @@ MachineCheckException(struct pt_regs *regs)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 | 
					#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 | 
				
			||||||
	if (debugger_exception_handler && (*debugger_exception_handler)(regs))
 | 
						if (debugger_exception_handler && (*debugger_exception_handler) (regs))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printf("Machine check in kernel mode.\n");
 | 
						printf("Machine check in kernel mode.\n");
 | 
				
			||||||
	printf("Caused by (from msr): ");
 | 
						printf("Caused by (from msr): ");
 | 
				
			||||||
	printf("regs %p ",regs);
 | 
						printf("regs %p ", regs);
 | 
				
			||||||
	switch( regs->msr & 0x000F0000) {
 | 
						switch (regs->msr & 0x000F0000) {
 | 
				
			||||||
	case (0x80000000>>12):
 | 
						case (0x80000000 >> 12):
 | 
				
			||||||
		printf("Machine check signal - probably due to mm fault\n"
 | 
							printf("Machine check signal - probably due to mm fault\n"
 | 
				
			||||||
		       "with mmu off\n");
 | 
							       "with mmu off\n");
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case (0x80000000>>13):
 | 
						case (0x80000000 >> 13):
 | 
				
			||||||
		printf("Transfer error ack signal\n");
 | 
							printf("Transfer error ack signal\n");
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case (0x80000000>>14):
 | 
						case (0x80000000 >> 14):
 | 
				
			||||||
		printf("Data parity signal\n");
 | 
							printf("Data parity signal\n");
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case (0x80000000>>15):
 | 
						case (0x80000000 >> 15):
 | 
				
			||||||
		printf("Address parity signal\n");
 | 
							printf("Address parity signal\n");
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
@ -157,7 +156,7 @@ void
 | 
				
			|||||||
AlignmentException(struct pt_regs *regs)
 | 
					AlignmentException(struct pt_regs *regs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 | 
					#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 | 
				
			||||||
	if (debugger_exception_handler && (*debugger_exception_handler)(regs))
 | 
						if (debugger_exception_handler && (*debugger_exception_handler) (regs))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	show_regs(regs);
 | 
						show_regs(regs);
 | 
				
			||||||
@ -172,17 +171,17 @@ ProgramCheckException(struct pt_regs *regs)
 | 
				
			|||||||
	int i, j;
 | 
						int i, j;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 | 
					#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 | 
				
			||||||
	if (debugger_exception_handler && (*debugger_exception_handler)(regs))
 | 
						if (debugger_exception_handler && (*debugger_exception_handler) (regs))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	show_regs(regs);
 | 
						show_regs(regs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	p = (unsigned char *) ((unsigned long)p & 0xFFFFFFE0);
 | 
						p = (unsigned char *)((unsigned long)p & 0xFFFFFFE0);
 | 
				
			||||||
	p -= 32;
 | 
						p -= 32;
 | 
				
			||||||
	for (i = 0; i < 256; i+=16) {
 | 
						for (i = 0; i < 256; i += 16) {
 | 
				
			||||||
		printf("%08x: ", (unsigned int)p+i);
 | 
							printf("%08x: ", (unsigned int)p + i);
 | 
				
			||||||
		for (j = 0; j < 16; j++) {
 | 
							for (j = 0; j < 16; j++) {
 | 
				
			||||||
			printf("%02x ", p[i+j]);
 | 
								printf("%02x ", p[i + j]);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		printf("\n");
 | 
							printf("\n");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -195,7 +194,7 @@ void
 | 
				
			|||||||
SoftEmuException(struct pt_regs *regs)
 | 
					SoftEmuException(struct pt_regs *regs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 | 
					#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 | 
				
			||||||
	if (debugger_exception_handler && (*debugger_exception_handler)(regs))
 | 
						if (debugger_exception_handler && (*debugger_exception_handler) (regs))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	show_regs(regs);
 | 
						show_regs(regs);
 | 
				
			||||||
@ -203,12 +202,11 @@ SoftEmuException(struct pt_regs *regs)
 | 
				
			|||||||
	panic("Software Emulation Exception");
 | 
						panic("Software Emulation Exception");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
UnknownException(struct pt_regs *regs)
 | 
					UnknownException(struct pt_regs *regs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 | 
					#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 | 
				
			||||||
	if (debugger_exception_handler && (*debugger_exception_handler)(regs))
 | 
						if (debugger_exception_handler && (*debugger_exception_handler) (regs))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	printf("Bad trap at PC: %lx, SR: %lx, vector=%lx\n",
 | 
						printf("Bad trap at PC: %lx, SR: %lx, vector=%lx\n",
 | 
				
			||||||
@ -216,36 +214,13 @@ UnknownException(struct pt_regs *regs)
 | 
				
			|||||||
	_exception(0, regs);
 | 
						_exception(0, regs);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Probe an address by reading.  If not present, return -1, otherwise
 | 
					/*
 | 
				
			||||||
 * return 0.
 | 
					 * Probe an address by reading.
 | 
				
			||||||
 | 
					 * If not present, return -1,
 | 
				
			||||||
 | 
					 * otherwise return 0.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
addr_probe(uint *addr)
 | 
					addr_probe(uint *addr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if 0
 | 
					 | 
				
			||||||
	int	retval;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	__asm__ __volatile__(			\
 | 
					 | 
				
			||||||
		"1:	lwz %0,0(%1)\n"		\
 | 
					 | 
				
			||||||
		"	eieio\n"		\
 | 
					 | 
				
			||||||
		"	li %0,0\n"		\
 | 
					 | 
				
			||||||
		"2:\n"				\
 | 
					 | 
				
			||||||
		".section .fixup,\"ax\"\n"	\
 | 
					 | 
				
			||||||
		"3:	li %0,-1\n"		\
 | 
					 | 
				
			||||||
		"	b 2b\n"			\
 | 
					 | 
				
			||||||
		".section __ex_table,\"a\"\n"	\
 | 
					 | 
				
			||||||
		"	.align 2\n"		\
 | 
					 | 
				
			||||||
		"	.long 1b,3b\n"		\
 | 
					 | 
				
			||||||
		".text"				\
 | 
					 | 
				
			||||||
		: "=r" (retval) : "r"(addr));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return (retval);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user