[U-Boot-Users] U-Boot hangs when try to access PCI window beyond 256 MB using md command
vivek.trivedi at wipro.com
vivek.trivedi at wipro.com
Thu Mar 13 08:04:37 CET 2008
Hi ,
We are using U-Boot-1.1.3 on a custom MPC8349ADS board with 2 PCI buses
configured in Host mode.We have 256 MB DDR2 in our board.
We have connected 8 DSPs on PCI bus 1.
U-Boot is assigning base address for DSPs from 0x80000000 to 0x93800000.
We are able to access any location from 0x80000000 to 0x0x8FFFFFFF i.e
first 256 MB using md command in U-BOOT.
But when i try to access any location starting from 0x90000000 to
0x93800000(next 256 MB), U-Boot hangs :
=>md 0x90000000
90000000:
Even though PCI LAWBARs and Outbound window is configured for 512 MB
starting from 0x80000000.
I am not able to understand why i am not able to access any location
starting from 0x90000000.
Please help me in as i have already wasted too much time in debugging
this issue.
I am also attaching the U-Boot PCI settings:
We are Configuring PCI bus in Host mode with following settings:
/* PCI window setting in include/configs/MPC8349ADS.h start */
#define CFG_PCI1_MEM_BASE 0x80000000
#define CFG_PCI1_MEM_PHYS CFG_PCI1_MEM_BASE
#define CFG_PCI1_MEM_SIZE 0x20000000 /* 512M */
#define CFG_PCI1_IO_BASE 0x00000000
#define CFG_PCI1_IO_PHYS 0xe2000000
#define CFG_PCI1_IO_SIZE 0x01000000 /* 16M */
/* PCI window setting in MPC8349ADS.h start */
PCI LAWBARas setting:
/* PCI LAWBARs setting in cpu/83xx/pci.c : start*/
pci_law[0].bar = CFG_PCI1_MEM_PHYS & LAWBAR_BAR; /* base: 0x80000000
*/
pci_law[0].ar = LAWAR_EN | LAWAR_SIZE_1G;
pci_law[1].bar = CFG_PCI1_IO_PHYS & LAWBAR_BAR; /* base: 0xe2000000 */
pci_law[1].ar = LAWAR_EN | LAWAR_SIZE_16M;
/* PCI LAWBARs setting in cpu/83xx/pci.c :end*/
PCI Outbound translation register setting:
/* PCI1 mem space */
pci_pot[0].potar = (CFG_PCI1_MEM_BASE >> 12) & POTAR_TA_MASK;
/* base: 0x80000000 */
pci_pot[0].pobar = (CFG_PCI1_MEM_PHYS >> 12) & POBAR_BA_MASK;
/* base: 0x80000000 */
pci_pot[0].pocmr = POCMR_EN | (POCMR_CM_512M & POCMR_CM_MASK);
/* PCI1 IO space */
pci_pot[1].potar = (CFG_PCI1_IO_BASE >> 12) & POTAR_TA_MASK;
pci_pot[1].pobar = (CFG_PCI1_IO_PHYS >> 12) & POBAR_BA_MASK;
pci_pot[1].pocmr = POCMR_EN | POCMR_IO | (POCMR_CM_16M &
POCMR_CM_MASK);
/*
* Configure PCI Inbound Translation Windows
*/
/* we need RAM mapped to PCI space for the devices to
* access main memory */
pci_ctrl[0].pitar1 = 0x0;
pci_ctrl[0].pibar1 = 0x0;
pci_ctrl[0].piebar1 = 0x0;
pci_ctrl[0].piwar1 = PIWAR_EN | PIWAR_PF | PIWAR_RTT_SNOOP |
PIWAR_WTT_SNOOP | (__ilog2(gd->ram_size) - 1);
hose->first_busno = 0;
hose->last_busno = 0xff;
/* PCI memory space */
pci_set_region(hose->regions + 0,
CFG_PCI1_MEM_BASE, /* base: 0x80000000 */
CFG_PCI1_MEM_PHYS,
CFG_PCI1_MEM_SIZE, /* Size is 512 MB */
PCI_REGION_MEM);
/* PCI IO space */
pci_set_region(hose->regions + 1,
CFG_PCI1_IO_BASE,
CFG_PCI1_IO_PHYS,
CFG_PCI1_IO_SIZE,
PCI_REGION_IO);
/* System memory space */
pci_set_region(hose->regions + 2,
CONFIG_PCI_SYS_MEM_BUS,
CONFIG_PCI_SYS_MEM_PHYS,
gd->ram_size,
PCI_REGION_MEM | PCI_REGION_MEMORY);
hose->region_count = 3;
pci_setup_indirect(hose,
(CFG_IMMRBAR+0x8300),
(CFG_IMMRBAR+0x8304));
pci_register_hose(hose);
/*
* Write to Command register
*/
reg16 = 0xff;
dev = PCI_BDF(hose->first_busno, 0, 0);
pci_hose_read_config_word (hose, dev, PCI_COMMAND, ®16);
reg16 |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY;
pci_hose_write_config_word(hose, dev, PCI_COMMAND, reg16);
/*
* Clear non-reserved bits in status register.
*/
pci_hose_write_config_word(hose, dev, PCI_STATUS, 0xffff);
pci_hose_write_config_byte(hose, dev, PCI_LATENCY_TIMER, 0x80);
pci_hose_write_config_byte(hose, dev, PCI_CACHE_LINE_SIZE, 0x08);
#ifdef CONFIG_PCI_SCAN_SHOW
printf("PCI: Bus Dev VenId DevId Class Int\n");
#endif
/*
* Hose scan.
*/
hose->last_busno = pci_hose_scan(hose);
Thanks & Regards,
Vivek Trivedi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.denx.de/pipermail/u-boot/attachments/20080313/468cdc3a/attachment.htm
More information about the U-Boot
mailing list