|
|
|
@ -2,12 +2,12 @@ |
|
|
|
|
* (C) Copyright 2007-2008 |
|
|
|
|
* Larry Johnson, lrj@acm.org |
|
|
|
|
* |
|
|
|
|
* (C) Copyright 2006 |
|
|
|
|
* (C) Copyright 2006-2008 |
|
|
|
|
* Stefan Roese, DENX Software Engineering, sr@denx.de. |
|
|
|
|
* |
|
|
|
|
* (C) Copyright 2006 |
|
|
|
|
* Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com |
|
|
|
|
* Alain Saurel, AMCC/IBM, alain.saurel@fr.ibm.com |
|
|
|
|
* Alain Saurel, AMCC/IBM, alain.saurel@fr.ibm.com |
|
|
|
|
* |
|
|
|
|
* This program is free software; you can redistribute it and/or |
|
|
|
|
* modify it under the terms of the GNU General Public License as |
|
|
|
@ -26,15 +26,16 @@ |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
#include <common.h> |
|
|
|
|
#include <asm/gpio.h> |
|
|
|
|
#include <asm/processor.h> |
|
|
|
|
#include <asm-ppc/io.h> |
|
|
|
|
#include <i2c.h> |
|
|
|
|
#include <ppc440.h> |
|
|
|
|
#include <asm/gpio.h> |
|
|
|
|
#include <asm/processor.h> |
|
|
|
|
#include <asm/io.h> |
|
|
|
|
#include <asm/bitops.h> |
|
|
|
|
|
|
|
|
|
DECLARE_GLOBAL_DATA_PTR; |
|
|
|
|
|
|
|
|
|
extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */ |
|
|
|
|
extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */ |
|
|
|
|
|
|
|
|
|
ulong flash_get_size(ulong base, int banknum); |
|
|
|
|
|
|
|
|
@ -47,9 +48,9 @@ int board_early_init_f(void) |
|
|
|
|
mtdcr(ebccfga, xbcfg); |
|
|
|
|
mtdcr(ebccfgd, 0xb8400000); |
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------
|
|
|
|
|
/*
|
|
|
|
|
* Setup the interrupt controller polarities, triggers, etc. |
|
|
|
|
*-------------------------------------------------------------------*/ |
|
|
|
|
*/ |
|
|
|
|
mtdcr(uic0sr, 0xffffffff); /* clear all */ |
|
|
|
|
mtdcr(uic0er, 0x00000000); /* disable all */ |
|
|
|
|
mtdcr(uic0cr, 0x00000005); /* ATI & UIC1 crit are critical */ |
|
|
|
@ -101,10 +102,10 @@ int board_early_init_f(void) |
|
|
|
|
/* select Ethernet pins */ |
|
|
|
|
mfsdr(SDR0_PFC1, sdr0_pfc1); |
|
|
|
|
sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SELECT_MASK) | |
|
|
|
|
SDR0_PFC1_SELECT_CONFIG_4; |
|
|
|
|
SDR0_PFC1_SELECT_CONFIG_4; |
|
|
|
|
mfsdr(SDR0_PFC2, sdr0_pfc2); |
|
|
|
|
sdr0_pfc2 = (sdr0_pfc2 & ~SDR0_PFC2_SELECT_MASK) | |
|
|
|
|
SDR0_PFC2_SELECT_CONFIG_4; |
|
|
|
|
SDR0_PFC2_SELECT_CONFIG_4; |
|
|
|
|
mtsdr(SDR0_PFC2, sdr0_pfc2); |
|
|
|
|
mtsdr(SDR0_PFC1, sdr0_pfc1); |
|
|
|
|
|
|
|
|
@ -221,9 +222,6 @@ static void set_mac_addresses(void) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*---------------------------------------------------------------------------+
|
|
|
|
|
| misc_init_r. |
|
|
|
|
+---------------------------------------------------------------------------*/ |
|
|
|
|
int misc_init_r(void) |
|
|
|
|
{ |
|
|
|
|
uint pbcr; |
|
|
|
@ -234,11 +232,7 @@ int misc_init_r(void) |
|
|
|
|
unsigned long sdr0_pfc1; |
|
|
|
|
char *act = getenv("usbact"); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* FLASH stuff... |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
/* Re-do sizing to get full correct info */ |
|
|
|
|
/* Re-do flash sizing to get full correct info */ |
|
|
|
|
|
|
|
|
|
/* adjust flash start and offset */ |
|
|
|
|
gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize; |
|
|
|
@ -246,32 +240,7 @@ int misc_init_r(void) |
|
|
|
|
|
|
|
|
|
mtdcr(ebccfga, pb0cr); |
|
|
|
|
pbcr = mfdcr(ebccfgd); |
|
|
|
|
switch (gd->bd->bi_flashsize) { |
|
|
|
|
case 1 << 20: |
|
|
|
|
size_val = 0; |
|
|
|
|
break; |
|
|
|
|
case 2 << 20: |
|
|
|
|
size_val = 1; |
|
|
|
|
break; |
|
|
|
|
case 4 << 20: |
|
|
|
|
size_val = 2; |
|
|
|
|
break; |
|
|
|
|
case 8 << 20: |
|
|
|
|
size_val = 3; |
|
|
|
|
break; |
|
|
|
|
case 16 << 20: |
|
|
|
|
size_val = 4; |
|
|
|
|
break; |
|
|
|
|
case 32 << 20: |
|
|
|
|
size_val = 5; |
|
|
|
|
break; |
|
|
|
|
case 64 << 20: |
|
|
|
|
size_val = 6; |
|
|
|
|
break; |
|
|
|
|
case 128 << 20: |
|
|
|
|
size_val = 7; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
size_val = ffs(gd->bd->bi_flashsize) - 21; |
|
|
|
|
pbcr = (pbcr & 0x0001ffff) | gd->bd->bi_flashstart | (size_val << 17); |
|
|
|
|
mtdcr(ebccfga, pb0cr); |
|
|
|
|
mtdcr(ebccfgd, pbcr); |
|
|
|
@ -286,8 +255,7 @@ int misc_init_r(void) |
|
|
|
|
&flash_info[0]); |
|
|
|
|
|
|
|
|
|
/* Env protection ON by default */ |
|
|
|
|
(void)flash_protect(FLAG_PROTECT_SET, |
|
|
|
|
CFG_ENV_ADDR_REDUND, |
|
|
|
|
(void)flash_protect(FLAG_PROTECT_SET, CFG_ENV_ADDR_REDUND, |
|
|
|
|
CFG_ENV_ADDR_REDUND + 2 * CFG_ENV_SECT_SIZE - 1, |
|
|
|
|
&flash_info[0]); |
|
|
|
|
|
|
|
|
@ -301,35 +269,40 @@ int misc_init_r(void) |
|
|
|
|
mfsdr(SDR0_USB2PHY0CR, usb2phy0cr); |
|
|
|
|
mfsdr(SDR0_USB2H0CR, usb2h0cr); |
|
|
|
|
|
|
|
|
|
usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_XOCLK_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL; /*0 */ |
|
|
|
|
usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_WDINT_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_16BIT_30MHZ; /*1 */ |
|
|
|
|
usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DVBUS_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS; /*0 */ |
|
|
|
|
usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DWNSTR_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST; /*1 */ |
|
|
|
|
usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_UTMICN_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST; /*1 */ |
|
|
|
|
|
|
|
|
|
/* An 8-bit/60MHz interface is the only possible alternative
|
|
|
|
|
when connecting the Device to the PHY */ |
|
|
|
|
usb2h0cr = usb2h0cr & ~SDR0_USB2H0CR_WDINT_MASK; |
|
|
|
|
usb2h0cr = usb2h0cr | SDR0_USB2H0CR_WDINT_16BIT_30MHZ; /*1 */ |
|
|
|
|
|
|
|
|
|
/* To enable the USB 2.0 Device function through the UTMI interface */ |
|
|
|
|
usb2d0cr = usb2d0cr & ~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK; |
|
|
|
|
usb2d0cr = usb2d0cr | SDR0_USB2D0CR_USB2DEV_SELECTION; /*1 */ |
|
|
|
|
|
|
|
|
|
sdr0_pfc1 = sdr0_pfc1 & ~SDR0_PFC1_UES_MASK; |
|
|
|
|
sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_USB2D_SEL; /*0 */ |
|
|
|
|
usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL; |
|
|
|
|
usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_WDINT_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_16BIT_30MHZ; |
|
|
|
|
usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS; |
|
|
|
|
usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST; |
|
|
|
|
usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST; |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* An 8-bit/60MHz interface is the only possible alternative |
|
|
|
|
* when connecting the Device to the PHY |
|
|
|
|
*/ |
|
|
|
|
usb2h0cr = usb2h0cr &~SDR0_USB2H0CR_WDINT_MASK; |
|
|
|
|
usb2h0cr = usb2h0cr | SDR0_USB2H0CR_WDINT_16BIT_30MHZ; |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* To enable the USB 2.0 Device function |
|
|
|
|
* through the UTMI interface |
|
|
|
|
*/ |
|
|
|
|
usb2d0cr = usb2d0cr &~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK; |
|
|
|
|
usb2d0cr = usb2d0cr | SDR0_USB2D0CR_USB2DEV_SELECTION; |
|
|
|
|
|
|
|
|
|
sdr0_pfc1 = sdr0_pfc1 &~SDR0_PFC1_UES_MASK; |
|
|
|
|
sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_USB2D_SEL; |
|
|
|
|
|
|
|
|
|
mtsdr(SDR0_PFC1, sdr0_pfc1); |
|
|
|
|
mtsdr(SDR0_USB2D0CR, usb2d0cr); |
|
|
|
|
mtsdr(SDR0_USB2PHY0CR, usb2phy0cr); |
|
|
|
|
mtsdr(SDR0_USB2H0CR, usb2h0cr); |
|
|
|
|
|
|
|
|
|
/*clear resets */ |
|
|
|
|
/* clear resets */ |
|
|
|
|
udelay(1000); |
|
|
|
|
mtsdr(SDR0_SRST1, 0x00000000); |
|
|
|
|
udelay(1000); |
|
|
|
@ -341,14 +314,14 @@ int misc_init_r(void) |
|
|
|
|
/*-------------------PATCH-------------------------------*/ |
|
|
|
|
mfsdr(SDR0_USB2PHY0CR, usb2phy0cr); |
|
|
|
|
|
|
|
|
|
usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_XOCLK_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL; /*0 */ |
|
|
|
|
usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DVBUS_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS; /*0 */ |
|
|
|
|
usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DWNSTR_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST; /*1 */ |
|
|
|
|
usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_UTMICN_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST; /*1 */ |
|
|
|
|
usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL; |
|
|
|
|
usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS; |
|
|
|
|
usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST; |
|
|
|
|
usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST; |
|
|
|
|
mtsdr(SDR0_USB2PHY0CR, usb2phy0cr); |
|
|
|
|
|
|
|
|
|
udelay(1000); |
|
|
|
@ -372,32 +345,32 @@ int misc_init_r(void) |
|
|
|
|
mfsdr(SDR0_USB2D0CR, usb2d0cr); |
|
|
|
|
mfsdr(SDR0_PFC1, sdr0_pfc1); |
|
|
|
|
|
|
|
|
|
usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_XOCLK_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL; /*0 */ |
|
|
|
|
usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_WDINT_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_8BIT_60MHZ; /*0 */ |
|
|
|
|
usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DVBUS_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PUREN; /*1 */ |
|
|
|
|
usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DWNSTR_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_DEV; /*0 */ |
|
|
|
|
usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_UTMICN_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_DEV; /*0 */ |
|
|
|
|
usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL; |
|
|
|
|
usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_WDINT_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_8BIT_60MHZ; |
|
|
|
|
usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PUREN; |
|
|
|
|
usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_DEV; |
|
|
|
|
usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK; |
|
|
|
|
usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_DEV; |
|
|
|
|
|
|
|
|
|
usb2h0cr = usb2h0cr & ~SDR0_USB2H0CR_WDINT_MASK; |
|
|
|
|
usb2h0cr = usb2h0cr | SDR0_USB2H0CR_WDINT_8BIT_60MHZ; /*0 */ |
|
|
|
|
usb2h0cr = usb2h0cr &~SDR0_USB2H0CR_WDINT_MASK; |
|
|
|
|
usb2h0cr = usb2h0cr | SDR0_USB2H0CR_WDINT_8BIT_60MHZ; |
|
|
|
|
|
|
|
|
|
usb2d0cr = usb2d0cr & ~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK; |
|
|
|
|
usb2d0cr = usb2d0cr | SDR0_USB2D0CR_EBC_SELECTION; /*0 */ |
|
|
|
|
usb2d0cr = usb2d0cr &~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK; |
|
|
|
|
usb2d0cr = usb2d0cr | SDR0_USB2D0CR_EBC_SELECTION; |
|
|
|
|
|
|
|
|
|
sdr0_pfc1 = sdr0_pfc1 & ~SDR0_PFC1_UES_MASK; |
|
|
|
|
sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_EBCHR_SEL; /*1 */ |
|
|
|
|
sdr0_pfc1 = sdr0_pfc1 &~SDR0_PFC1_UES_MASK; |
|
|
|
|
sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_EBCHR_SEL; |
|
|
|
|
|
|
|
|
|
mtsdr(SDR0_USB2H0CR, usb2h0cr); |
|
|
|
|
mtsdr(SDR0_USB2PHY0CR, usb2phy0cr); |
|
|
|
|
mtsdr(SDR0_USB2D0CR, usb2d0cr); |
|
|
|
|
mtsdr(SDR0_PFC1, sdr0_pfc1); |
|
|
|
|
|
|
|
|
|
/*clear resets */ |
|
|
|
|
/* clear resets */ |
|
|
|
|
udelay(1000); |
|
|
|
|
mtsdr(SDR0_SRST1, 0x00000000); |
|
|
|
|
udelay(1000); |
|
|
|
@ -406,7 +379,7 @@ int misc_init_r(void) |
|
|
|
|
printf("USB: Device(int phy)\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
mfsdr(SDR0_SRST1, reg); /* enable security/kasumi engines */ |
|
|
|
|
mfsdr(SDR0_SRST1, reg); /* enable security/kasumi engines */ |
|
|
|
|
reg &= ~(SDR0_SRST1_CRYP0 | SDR0_SRST1_KASU0); |
|
|
|
|
mtsdr(SDR0_SRST1, reg); |
|
|
|
|
|
|
|
|
@ -486,43 +459,42 @@ int testdram(void) |
|
|
|
|
} |
|
|
|
|
#endif /* defined(CFG_DRAM_TEST) */ |
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
* pci_pre_init |
|
|
|
|
* |
|
|
|
|
* This routine is called just prior to registering the hose and gives |
|
|
|
|
* the board the opportunity to check things. Returning a value of zero |
|
|
|
|
* indicates that things are bad & PCI initialization should be aborted. |
|
|
|
|
/*
|
|
|
|
|
* pci_pre_init |
|
|
|
|
* |
|
|
|
|
* Different boards may wish to customize the pci controller structure |
|
|
|
|
* (add regions, override default access routines, etc) or perform |
|
|
|
|
* certain pre-initialization actions. |
|
|
|
|
* This routine is called just prior to registering the hose and gives |
|
|
|
|
* the board the opportunity to check things. Returning a value of zero |
|
|
|
|
* indicates that things are bad & PCI initialization should be aborted. |
|
|
|
|
* |
|
|
|
|
************************************************************************/ |
|
|
|
|
* Different boards may wish to customize the pci controller structure |
|
|
|
|
* (add regions, override default access routines, etc) or perform |
|
|
|
|
* certain pre-initialization actions. |
|
|
|
|
*/ |
|
|
|
|
#if defined(CONFIG_PCI) |
|
|
|
|
int pci_pre_init(struct pci_controller *hose) |
|
|
|
|
{ |
|
|
|
|
unsigned long addr; |
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------+
|
|
|
|
|
| Set priority for all PLB3 devices to 0. |
|
|
|
|
| Set PLB3 arbiter to fair mode. |
|
|
|
|
+-------------------------------------------------------------------------*/ |
|
|
|
|
/*
|
|
|
|
|
* Set priority for all PLB3 devices to 0. |
|
|
|
|
* Set PLB3 arbiter to fair mode. |
|
|
|
|
*/ |
|
|
|
|
mfsdr(sdr_amp1, addr); |
|
|
|
|
mtsdr(sdr_amp1, (addr & 0x000000FF) | 0x0000FF00); |
|
|
|
|
addr = mfdcr(plb3_acr); |
|
|
|
|
mtdcr(plb3_acr, addr | 0x80000000); |
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------+
|
|
|
|
|
| Set priority for all PLB4 devices to 0. |
|
|
|
|
+-------------------------------------------------------------------------*/ |
|
|
|
|
/*
|
|
|
|
|
* Set priority for all PLB4 devices to 0. |
|
|
|
|
*/ |
|
|
|
|
mfsdr(sdr_amp0, addr); |
|
|
|
|
mtsdr(sdr_amp0, (addr & 0x000000FF) | 0x0000FF00); |
|
|
|
|
addr = mfdcr(plb4_acr) | 0xa0000000; /* Was 0x8---- */ |
|
|
|
|
mtdcr(plb4_acr, addr); |
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------+
|
|
|
|
|
| Set Nebula PLB4 arbiter to fair mode. |
|
|
|
|
+-------------------------------------------------------------------------*/ |
|
|
|
|
/*
|
|
|
|
|
* Set Nebula PLB4 arbiter to fair mode. |
|
|
|
|
*/ |
|
|
|
|
/* Segment0 */ |
|
|
|
|
addr = (mfdcr(plb0_acr) & ~plb0_acr_ppm_mask) | plb0_acr_ppm_fair; |
|
|
|
|
addr = (addr & ~plb0_acr_hbu_mask) | plb0_acr_hbu_enabled; |
|
|
|
@ -541,47 +513,51 @@ int pci_pre_init(struct pci_controller *hose) |
|
|
|
|
} |
|
|
|
|
#endif /* defined(CONFIG_PCI) */ |
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
* pci_target_init |
|
|
|
|
* |
|
|
|
|
* The bootstrap configuration provides default settings for the pci |
|
|
|
|
* inbound map (PIM). But the bootstrap config choices are limited and |
|
|
|
|
* may not be sufficient for a given board. |
|
|
|
|
/*
|
|
|
|
|
* pci_target_init |
|
|
|
|
* |
|
|
|
|
************************************************************************/ |
|
|
|
|
* The bootstrap configuration provides default settings for the pci |
|
|
|
|
* inbound map (PIM). But the bootstrap config choices are limited and |
|
|
|
|
* may not be sufficient for a given board. |
|
|
|
|
*/ |
|
|
|
|
#if defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT) |
|
|
|
|
void pci_target_init(struct pci_controller *hose) |
|
|
|
|
{ |
|
|
|
|
/*--------------------------------------------------------------------------+
|
|
|
|
|
/*
|
|
|
|
|
* Set up Direct MMIO registers |
|
|
|
|
*--------------------------------------------------------------------------*/ |
|
|
|
|
/*--------------------------------------------------------------------------+
|
|
|
|
|
| PowerPC440EPX PCI Master configuration. |
|
|
|
|
| Map one 1Gig range of PLB/processor addresses to PCI memory space. |
|
|
|
|
| PLB address 0xA0000000-0xDFFFFFFF ==> PCI address 0xA0000000-0xDFFFFFFF |
|
|
|
|
| Use byte reversed out routines to handle endianess. |
|
|
|
|
| Make this region non-prefetchable. |
|
|
|
|
+--------------------------------------------------------------------------*/ |
|
|
|
|
out32r(PCIX0_PMM0MA, 0x00000000); /* PMM0 Mask/Attribute - disabled b4 setting */ |
|
|
|
|
*/ |
|
|
|
|
/*
|
|
|
|
|
* PowerPC440EPX PCI Master configuration. |
|
|
|
|
* Map one 1Gig range of PLB/processor addresses to PCI memory space. |
|
|
|
|
* PLB address 0xA0000000-0xDFFFFFFF |
|
|
|
|
* ==> PCI address 0xA0000000-0xDFFFFFFF |
|
|
|
|
* Use byte reversed out routines to handle endianess. |
|
|
|
|
* Make this region non-prefetchable. |
|
|
|
|
*/ |
|
|
|
|
out32r(PCIX0_PMM0MA, 0x00000000); /* PMM0 Mask/Attribute */ |
|
|
|
|
/* - disabled b4 setting */ |
|
|
|
|
out32r(PCIX0_PMM0LA, CFG_PCI_MEMBASE); /* PMM0 Local Address */ |
|
|
|
|
out32r(PCIX0_PMM0PCILA, CFG_PCI_MEMBASE); /* PMM0 PCI Low Address */ |
|
|
|
|
out32r(PCIX0_PMM0PCILA, CFG_PCI_MEMBASE); /* PMM0 PCI Low Address */ |
|
|
|
|
out32r(PCIX0_PMM0PCIHA, 0x00000000); /* PMM0 PCI High Address */ |
|
|
|
|
out32r(PCIX0_PMM0MA, 0xE0000001); /* 512M + No prefetching, and enable region */ |
|
|
|
|
out32r(PCIX0_PMM0MA, 0xE0000001); /* 512M + No prefetching, */ |
|
|
|
|
/* and enable region */ |
|
|
|
|
|
|
|
|
|
out32r(PCIX0_PMM1MA, 0x00000000); /* PMM0 Mask/Attribute - disabled b4 setting */ |
|
|
|
|
out32r(PCIX0_PMM1LA, CFG_PCI_MEMBASE2); /* PMM0 Local Address */ |
|
|
|
|
out32r(PCIX0_PMM1PCILA, CFG_PCI_MEMBASE2); /* PMM0 PCI Low Address */ |
|
|
|
|
out32r(PCIX0_PMM1MA, 0x00000000); /* PMM0 Mask/Attribute */ |
|
|
|
|
/* - disabled b4 setting */ |
|
|
|
|
out32r(PCIX0_PMM1LA, CFG_PCI_MEMBASE2); /* PMM0 Local Address */ |
|
|
|
|
out32r(PCIX0_PMM1PCILA, CFG_PCI_MEMBASE2); /* PMM0 PCI Low Address */ |
|
|
|
|
out32r(PCIX0_PMM1PCIHA, 0x00000000); /* PMM0 PCI High Address */ |
|
|
|
|
out32r(PCIX0_PMM1MA, 0xE0000001); /* 512M + No prefetching, and enable region */ |
|
|
|
|
out32r(PCIX0_PMM1MA, 0xE0000001); /* 512M + No prefetching, */ |
|
|
|
|
/* and enable region */ |
|
|
|
|
|
|
|
|
|
out32r(PCIX0_PTM1MS, 0x00000001); /* Memory Size/Attribute */ |
|
|
|
|
out32r(PCIX0_PTM1LA, 0); /* Local Addr. Reg */ |
|
|
|
|
out32r(PCIX0_PTM2MS, 0); /* Memory Size/Attribute */ |
|
|
|
|
out32r(PCIX0_PTM2LA, 0); /* Local Addr. Reg */ |
|
|
|
|
out32r(PCIX0_PTM1LA, 0); /* Local Addr. Reg */ |
|
|
|
|
out32r(PCIX0_PTM2MS, 0); /* Memory Size/Attribute */ |
|
|
|
|
out32r(PCIX0_PTM2LA, 0); /* Local Addr. Reg */ |
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------+
|
|
|
|
|
/*
|
|
|
|
|
* Set up Configuration registers |
|
|
|
|
*--------------------------------------------------------------------------*/ |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
/* Program the board's subsystem id/vendor id */ |
|
|
|
|
pci_write_config_word(0, PCI_SUBSYSTEM_VENDOR_ID, |
|
|
|
@ -599,27 +575,24 @@ void pci_target_init(struct pci_controller *hose) |
|
|
|
|
|
|
|
|
|
pci_write_config_dword(0, PCI_BRDGOPT2, 0x00000101); |
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------+
|
|
|
|
|
* Set up Configuration registers for on-board NEC uPD720101 USB controller |
|
|
|
|
*--------------------------------------------------------------------------*/ |
|
|
|
|
/*
|
|
|
|
|
* Set up Configuration registers for on-board NEC uPD720101 USB |
|
|
|
|
* controller. |
|
|
|
|
*/ |
|
|
|
|
pci_write_config_dword(PCI_BDF(0x0, 0xC, 0x0), 0xE4, 0x00000020); |
|
|
|
|
} |
|
|
|
|
#endif /* defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT) */ |
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
* pci_master_init |
|
|
|
|
* |
|
|
|
|
************************************************************************/ |
|
|
|
|
#if defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT) |
|
|
|
|
void pci_master_init(struct pci_controller *hose) |
|
|
|
|
{ |
|
|
|
|
unsigned short temp_short; |
|
|
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------+
|
|
|
|
|
| Write the PowerPC440 EP PCI Configuration regs. |
|
|
|
|
| Enable PowerPC440 EP to be a master on the PCI bus (PMM). |
|
|
|
|
| Enable PowerPC440 EP to act as a PCI memory target (PTM). |
|
|
|
|
+--------------------------------------------------------------------------*/ |
|
|
|
|
/*
|
|
|
|
|
* Write the PowerPC440 EP PCI Configuration regs. |
|
|
|
|
* Enable PowerPC440 EP to be a master on the PCI bus (PMM). |
|
|
|
|
* Enable PowerPC440 EP to act as a PCI memory target (PTM). |
|
|
|
|
*/ |
|
|
|
|
pci_read_config_word(0, PCI_COMMAND, &temp_short); |
|
|
|
|
pci_write_config_word(0, PCI_COMMAND, |
|
|
|
|
temp_short | PCI_COMMAND_MASTER | |
|
|
|
@ -627,28 +600,26 @@ void pci_master_init(struct pci_controller *hose) |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
* is_pci_host |
|
|
|
|
* |
|
|
|
|
* This routine is called to determine if a pci scan should be |
|
|
|
|
* performed. With various hardware environments (especially cPCI and |
|
|
|
|
* PPMC) it's insufficient to depend on the state of the arbiter enable |
|
|
|
|
* bit in the strap register, or generic host/adapter assumptions. |
|
|
|
|
* |
|
|
|
|
* Rather than hard-code a bad assumption in the general 440 code, the |
|
|
|
|
* 440 pci code requires the board to decide at runtime. |
|
|
|
|
/*
|
|
|
|
|
* is_pci_host |
|
|
|
|
* |
|
|
|
|
* Return 0 for adapter mode, non-zero for host (monarch) mode. |
|
|
|
|
* This routine is called to determine if a pci scan should be |
|
|
|
|
* performed. With various hardware environments (especially cPCI and |
|
|
|
|
* PPMC) it's insufficient to depend on the state of the arbiter enable |
|
|
|
|
* bit in the strap register, or generic host/adapter assumptions. |
|
|
|
|
* |
|
|
|
|
* Rather than hard-code a bad assumption in the general 440 code, the |
|
|
|
|
* 440 pci code requires the board to decide at runtime. |
|
|
|
|
* |
|
|
|
|
************************************************************************/ |
|
|
|
|
* Return 0 for adapter mode, non-zero for host (monarch) mode. |
|
|
|
|
*/ |
|
|
|
|
#if defined(CONFIG_PCI) |
|
|
|
|
int is_pci_host(struct pci_controller *hose) |
|
|
|
|
{ |
|
|
|
|
/* Korat is always configured as host. */ |
|
|
|
|
return (1); |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
#endif /* defined(CONFIG_PCI) */ |
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_POST) |
|
|
|
|
/*
|
|
|
|
@ -657,6 +628,6 @@ int is_pci_host(struct pci_controller *hose) |
|
|
|
|
*/ |
|
|
|
|
int post_hotkeys_pressed(void) |
|
|
|
|
{ |
|
|
|
|
return 0; /* No hotkeys supported */ |
|
|
|
|
return 0; /* No hotkeys supported */ |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
#endif /* CONFIG_POST */ |
|
|
|
|