mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-27 23:20:26 +09:00
ati_radeon: Support PCI virtual not eq bus mapping.
Use pci_bus_to_virt() to convert the bus address from the BARs to virtual address' to eliminate the direct mapping requirement. Rename variables to better match usage (_phys -> _bus or no-suffix) This fixes the mpc8572ds CONFIG_PHYS_64BIT mode failure: "videoboot: Video ROM failed to map!" Tested on mpc8572ds with and without CONFIG_PHYS_64BIT. Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com>
This commit is contained in:
parent
9624f6d9eb
commit
f6a7a2e888
@ -173,7 +173,7 @@ Maps a pointer to the BIOS image on the graphics card on the PCI bus.
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
void *PCI_mapBIOSImage(pci_dev_t pcidev)
|
void *PCI_mapBIOSImage(pci_dev_t pcidev)
|
||||||
{
|
{
|
||||||
u32 BIOSImagePhys;
|
u32 BIOSImageBus;
|
||||||
int BIOSImageBAR;
|
int BIOSImageBAR;
|
||||||
u8 *BIOSImage;
|
u8 *BIOSImage;
|
||||||
|
|
||||||
@ -195,16 +195,18 @@ void *PCI_mapBIOSImage(pci_dev_t pcidev)
|
|||||||
specific programming for different cards to solve this problem.
|
specific programming for different cards to solve this problem.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ((BIOSImagePhys = PCI_findBIOSAddr(pcidev, &BIOSImageBAR)) == 0) {
|
BIOSImageBus = PCI_findBIOSAddr(pcidev, &BIOSImageBAR);
|
||||||
|
if (BIOSImageBus == 0) {
|
||||||
printf("Find bios addr error\n");
|
printf("Find bios addr error\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
BIOSImage = (u8 *) BIOSImagePhys;
|
BIOSImage = pci_bus_to_virt(pcidev, BIOSImageBus,
|
||||||
|
PCI_REGION_MEM, 0, MAP_NOCACHE);
|
||||||
|
|
||||||
/*Change the PCI BAR registers to map it onto the bus.*/
|
/*Change the PCI BAR registers to map it onto the bus.*/
|
||||||
pci_write_config_dword(pcidev, BIOSImageBAR, 0);
|
pci_write_config_dword(pcidev, BIOSImageBAR, 0);
|
||||||
pci_write_config_dword(pcidev, PCI_ROM_ADDRESS, BIOSImagePhys | 0x1);
|
pci_write_config_dword(pcidev, PCI_ROM_ADDRESS, BIOSImageBus | 0x1);
|
||||||
|
|
||||||
udelay(1);
|
udelay(1);
|
||||||
|
|
||||||
|
@ -210,7 +210,7 @@ static void radeon_identify_vram(struct radeonfb_info *rinfo)
|
|||||||
* ToDo: identify these cases
|
* ToDo: identify these cases
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DPRINT("radeonfb: Found %ldk of %s %d bits wide videoram\n",
|
DPRINT("radeonfb: Found %dk of %s %d bits wide videoram\n",
|
||||||
rinfo->video_ram / 1024,
|
rinfo->video_ram / 1024,
|
||||||
rinfo->vram_ddr ? "DDR" : "SDRAM",
|
rinfo->vram_ddr ? "DDR" : "SDRAM",
|
||||||
rinfo->vram_width);
|
rinfo->vram_width);
|
||||||
@ -586,14 +586,16 @@ int radeon_probe(struct radeonfb_info *rinfo)
|
|||||||
rinfo->pdev.device = did;
|
rinfo->pdev.device = did;
|
||||||
rinfo->family = get_radeon_id_family(rinfo->pdev.device);
|
rinfo->family = get_radeon_id_family(rinfo->pdev.device);
|
||||||
pci_read_config_dword(pdev, PCI_BASE_ADDRESS_0,
|
pci_read_config_dword(pdev, PCI_BASE_ADDRESS_0,
|
||||||
&rinfo->fb_base_phys);
|
&rinfo->fb_base_bus);
|
||||||
pci_read_config_dword(pdev, PCI_BASE_ADDRESS_2,
|
pci_read_config_dword(pdev, PCI_BASE_ADDRESS_2,
|
||||||
&rinfo->mmio_base_phys);
|
&rinfo->mmio_base_bus);
|
||||||
rinfo->fb_base_phys &= 0xfffff000;
|
rinfo->fb_base_bus &= 0xfffff000;
|
||||||
rinfo->mmio_base_phys &= ~0x04;
|
rinfo->mmio_base_bus &= ~0x04;
|
||||||
|
|
||||||
rinfo->mmio_base = (void *)rinfo->mmio_base_phys;
|
rinfo->mmio_base = pci_bus_to_virt(pdev, rinfo->mmio_base_bus,
|
||||||
DPRINT("rinfo->mmio_base = 0x%x\n",rinfo->mmio_base);
|
PCI_REGION_MEM, 0, MAP_NOCACHE);
|
||||||
|
DPRINT("rinfo->mmio_base = 0x%x bus=0x%x\n",
|
||||||
|
rinfo->mmio_base, rinfo->mmio_base_bus);
|
||||||
rinfo->fb_local_base = INREG(MC_FB_LOCATION) << 16;
|
rinfo->fb_local_base = INREG(MC_FB_LOCATION) << 16;
|
||||||
DPRINT("rinfo->fb_local_base = 0x%x\n",rinfo->fb_local_base);
|
DPRINT("rinfo->fb_local_base = 0x%x\n",rinfo->fb_local_base);
|
||||||
/* PostBIOS with x86 emulater */
|
/* PostBIOS with x86 emulater */
|
||||||
@ -611,14 +613,15 @@ int radeon_probe(struct radeonfb_info *rinfo)
|
|||||||
|
|
||||||
rinfo->mapped_vram = min_t(unsigned long, MAX_MAPPED_VRAM,
|
rinfo->mapped_vram = min_t(unsigned long, MAX_MAPPED_VRAM,
|
||||||
rinfo->video_ram);
|
rinfo->video_ram);
|
||||||
rinfo->fb_base = (void *)rinfo->fb_base_phys;
|
rinfo->fb_base = pci_bus_to_virt(pdev, rinfo->fb_base_bus,
|
||||||
|
PCI_REGION_MEM, 0, MAP_NOCACHE);
|
||||||
DPRINT("Radeon: framebuffer base phy address 0x%08x," \
|
DPRINT("Radeon: framebuffer base address 0x%08x, "
|
||||||
"MMIO base phy address 0x%08x," \
|
"bus address 0x%08x\n"
|
||||||
"framebuffer local base 0x%08x.\n ",
|
"MMIO base address 0x%08x, bus address 0x%08x, "
|
||||||
rinfo->fb_base_phys, rinfo->mmio_base_phys,
|
"framebuffer local base 0x%08x.\n ",
|
||||||
rinfo->fb_local_base);
|
(u32)rinfo->fb_base, rinfo->fb_base_bus,
|
||||||
|
(u32)rinfo->mmio_base, rinfo->mmio_base_bus,
|
||||||
|
rinfo->fb_local_base);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
@ -734,13 +737,13 @@ void *video_hw_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pGD->isaBase = CONFIG_SYS_ISA_IO_BASE_ADDRESS;
|
pGD->isaBase = CONFIG_SYS_ISA_IO_BASE_ADDRESS;
|
||||||
pGD->pciBase = rinfo->fb_base_phys;
|
pGD->pciBase = (unsigned int)rinfo->fb_base;
|
||||||
pGD->frameAdrs = rinfo->fb_base_phys;
|
pGD->frameAdrs = (unsigned int)rinfo->fb_base;
|
||||||
pGD->memSize = 64 * 1024 * 1024;
|
pGD->memSize = 64 * 1024 * 1024;
|
||||||
|
|
||||||
/* Cursor Start Address */
|
/* Cursor Start Address */
|
||||||
pGD->dprBase =
|
pGD->dprBase = (pGD->winSizeX * pGD->winSizeY * pGD->gdfBytesPP) +
|
||||||
(pGD->winSizeX * pGD->winSizeY * pGD->gdfBytesPP) + rinfo->fb_base_phys;
|
(unsigned int)rinfo->fb_base;
|
||||||
if ((pGD->dprBase & 0x0fff) != 0) {
|
if ((pGD->dprBase & 0x0fff) != 0) {
|
||||||
/* allign it */
|
/* allign it */
|
||||||
pGD->dprBase &= 0xfffff000;
|
pGD->dprBase &= 0xfffff000;
|
||||||
@ -748,8 +751,8 @@ void *video_hw_init(void)
|
|||||||
}
|
}
|
||||||
DPRINT ("Cursor Start %x Pattern Start %x\n", pGD->dprBase,
|
DPRINT ("Cursor Start %x Pattern Start %x\n", pGD->dprBase,
|
||||||
PATTERN_ADR);
|
PATTERN_ADR);
|
||||||
pGD->vprBase = rinfo->fb_base_phys; /* Dummy */
|
pGD->vprBase = (unsigned int)rinfo->fb_base; /* Dummy */
|
||||||
pGD->cprBase = rinfo->fb_base_phys; /* Dummy */
|
pGD->cprBase = (unsigned int)rinfo->fb_base; /* Dummy */
|
||||||
/* set up Hardware */
|
/* set up Hardware */
|
||||||
|
|
||||||
/* Clear video memory (only visible screen area) */
|
/* Clear video memory (only visible screen area) */
|
||||||
|
@ -49,8 +49,8 @@ struct radeonfb_info {
|
|||||||
struct pci_device_id pdev;
|
struct pci_device_id pdev;
|
||||||
u16 family;
|
u16 family;
|
||||||
|
|
||||||
u32 fb_base_phys;
|
u32 fb_base_bus;
|
||||||
u32 mmio_base_phys;
|
u32 mmio_base_bus;
|
||||||
|
|
||||||
void *mmio_base;
|
void *mmio_base;
|
||||||
void *fb_base;
|
void *fb_base;
|
||||||
|
Loading…
Reference in New Issue
Block a user