|
|
@ -47,46 +47,53 @@ pci_mpc86xx_init(struct pci_controller *hose) |
|
|
|
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) |
|
|
|
|
|
|
|
&& !(devdisr & MPC86xx_DEVDISR_PCIEX1)) { |
|
|
|
printf("PCI-EXPRESS 1: Configured as %s \n", |
|
|
|
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) |
|
|
|
|
|
|
|
return; /*Don't scan bus when configured as agent */ |
|
|
|
printf(" Scanning PCIE bus"); |
|
|
|
printf(" Scanning PCIE bus"); |
|
|
|
debug("0x%08x=0x%08x ", &pcie1->pme_msg_det,pcie1->pme_msg_det); |
|
|
|
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; |
|
|
|