ati_radeon: Support PCI virtual not eq bus mapping.
PATCH 1/1 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_PYS_64BIT mode failure:
"videoboot: Vidoe ROM failed to map!"
Tested on mpc8572ds with and without CONFIG_PHYS_64BIT.
---
This patch is independent of the ati radeon return error patch, but for ease of debug it should be applied with this one.
drivers/bios_emulator/atibios.c | 9 ++++--- drivers/video/ati_radeon_fb.c | 45 ++++++++++++++++++++------------------ drivers/video/ati_radeon_fb.h | 4 +- 3 files changed, 31 insertions(+), 27 deletions(-)
drivers/bios_emulator/atibios.c +5 -4
@@ -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) { -u32 BIOSImagePhys; +u32 BIOSImageBus;int BIOSImageBAR;u8 *BIOSImage;
@@ -195,16 +195,17 @@ void *PCI_mapBIOSImage(pci_dev_t pcidev)specific programming for different cards to solve this problem. */ -if ((BIOSImagePhys =PCI_findBIOSAddr (pcidev, &BIOSImageBAR)) ==0 ) { +if ((BIOSImageBus =PCI_findBIOSAddr (pcidev, &BIOSImageBAR)) ==0 ) {printf ("Find bios addr error\n" );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.*/ 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 );
drivers/video/ati_radeon_fb.c +24 -21
80 lines not on this page · raw message
drivers/video/ati_radeon_fb.h +2 -2
@@ -49,8 +49,8 @@ struct radeonfb_info {struct pci_device_id pdev;u16 family; -u32 fb_base_phys; -u32 mmio_base_phys; +u32 fb_base_bus; +u32 mmio_base_bus;void *mmio_base;void *fb_base;
Signature · 1 line
1.5.6.5
PATCH 1/1 ati_radeon: Support PCI virtual not eq bus mapping.
Quoted 7 lines · On Wed, 31 Mar 2010 09:54:57 -0500 Ed Swarthout <[email protected]>…
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->_busor no-suffix)This fixes the mpc8572ds
CONFIG_PYS_64BITmode failure:
"videoboot: Vidoe ROM failed to map!"
s/CONFIG_PYS_64BIT/CONFIG_PHYS_64BIT
s/Vidoe/Video
Quoted 5 lines
Tested on mpc8572ds with and without
CONFIG_PHYS_64BIT.Signed-off-by Ed Swarthout <[email protected]>---
Quoted 7 lines
This patch is independent of the ati radeon return error patch, but for ease of debug it should be applied with this one.
drivers/bios_emulator/atibios.c | 9 ++++--- drivers/video/ati_radeon_fb.c | 45 ++++++++++++++++++++------------------ drivers/video/ati_radeon_fb.h | 4 +- 3 files changed, 31 insertions(+), 27 deletions(-)
With this patch applied following warnings appear:
ati_radeon_fb.c: In function 'video_hw_init':
ati_radeon_fb.c:740: warning: assignment makes integer from pointer without a cast ati_radeon_fb.c:741: warning: assignment makes integer from pointer without a cast ati_radeon_fb.c:746: warning: assignment makes integer from pointer without a cast ati_radeon_fb.c:754: warning: assignment makes integer from pointer without a cast ati_radeon_fb.c:755: warning: assignment makes integer from pointer without a cast
Please include inlined patch below to fix them. Thanks.
Other than this, I tested this patch on PPC440EPx based sequoia board with ATI Radeon 9250 PCI card, it works.
Anatolij
drivers/video/ati_radeon_fb.c +6 -6
@@ -737,13 +737,13 @@ void *video_hw_init(void) } pGD->isaBase =CONFIG_SYS_ISA_IO_BASE_ADDRESS ; - pGD->pciBase = rinfo->fb_base; - pGD->frameAdrs = rinfo->fb_base; + pGD->pciBase = (unsigned int )rinfo->fb_base; + pGD->frameAdrs = (unsigned int )rinfo->fb_base; pGD->memSize =64 *1024 *1024 ;/* Cursor Start Address */ - pGD->dprBase = - (pGD->winSizeX * pGD->winSizeY * pGD->gdfBytesPP) + rinfo->fb_base; + pGD->dprBase = (pGD->winSizeX * pGD->winSizeY * pGD->gdfBytesPP) + + (unsigned int )rinfo->fb_base;if ((pGD->dprBase &0x0fff ) !=0 ) {/* allign it */ pGD->dprBase &=0xfffff000 ;
@@ -751,8 +751,8 @@ void *video_hw_init(void) }DPRINT ("Cursor Start %x Pattern Start %x\n" , pGD->dprBase,PATTERN_ADR ); - pGD->vprBase = rinfo->fb_base;/* Dummy */ - pGD->cprBase = rinfo->fb_base;/* Dummy */ + pGD->vprBase = (unsigned int )rinfo->fb_base;/* Dummy */ + pGD->cprBase = (unsigned int )rinfo->fb_base;/* Dummy */ /* set up Hardware */ /* Clear video memory (only visible screen area) */
PATCH v2 1/1 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.
---
V2:
Fix typos and warnings as pointed out by Anatolij Gustschin. -thanks
Fixed checkpatch error:
ERROR: do not use assignment in if condition
#41: FILE: drivers/bios_emulator/atibios.c:198:
+ if ((BIOSImageBus = PCI_findBIOSAddr(pcidev, &BIOSImageBAR)) == 0) {
drivers/bios_emulator/atibios.c | 10 +++++--- drivers/video/ati_radeon_fb.c | 47 ++++++++++++++++++++------------------ drivers/video/ati_radeon_fb.h | 4 +- 3 files changed, 33 insertions(+), 28 deletions(-)
drivers/bios_emulator/atibios.c +6 -4
@@ -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) { -u32 BIOSImagePhys; +u32 BIOSImageBus;int BIOSImageBAR;u8 *BIOSImage;
@@ -195,16 +195,18 @@ void *PCI_mapBIOSImage(pci_dev_t pcidev)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" );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.*/ 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 );
drivers/video/ati_radeon_fb.c +25 -22
81 lines not on this page · raw message
drivers/video/ati_radeon_fb.h +2 -2
@@ -49,8 +49,8 @@ struct radeonfb_info {struct pci_device_id pdev;u16 family; -u32 fb_base_phys; -u32 mmio_base_phys; +u32 fb_base_bus; +u32 mmio_base_bus;void *mmio_base;void *fb_base;
Signature · 1 line
1.5.6.5
PATCH v2 1/1 ati_radeon: Support PCI virtual not eq bus mapping.
Quoted 19 lines · On Wed, 31 Mar 2010 15:52:40 -0500 Ed Swarthout <[email protected]>…
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->_busor no-suffix)This fixes the mpc8572ds
CONFIG_PHYS_64BITmode failure:
"videoboot: Video ROM failed to map!"Tested on mpc8572ds with and without
CONFIG_PHYS_64BIT.Signed-off-by Ed Swarthout <[email protected]>---
V2:
Fix typos and warnings as pointed out by Anatolij Gustschin. -thanks
Fixed checkpatch error:
Quoted 8 lines
ERROR: do not use assignment in if condition
#41: FILE:drivers/bios_emulator/atibios.c:198:
+ if ((BIOSImageBus =PCI_findBIOSAddr(pcidev, &BIOSImageBAR)) == 0) {drivers/bios_emulator/atibios.c | 10 +++++--- drivers/video/ati_radeon_fb.c | 47 ++++++++++++++++++++------------------ drivers/video/ati_radeon_fb.h | 4 +- 3 files changed, 33 insertions(+), 28 deletions(-)
Applied to u-boot-video/master. Thanks!
Anatolij