]> git.sur5r.net Git - u-boot/blobdiff - drivers/video/ati_radeon_fb.c
env: Rename getenv/_f() to env_get()
[u-boot] / drivers / video / ati_radeon_fb.c
index a1e7baec164586fd518ade4e433916735b0c1739..5b6c42291cb0c482a29f0b1afd05fe436cc358b5 100644 (file)
@@ -5,23 +5,7 @@
  * Zhang Wei <wei.zhang@freescale.com>
  * Jason Jin <jason.jin@freescale.com>
  *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier:    GPL-2.0+
  *
  * Some codes of this file is partly ported from Linux kernel
  * ATI video framebuffer driver.
  *   9200
  *   X300
  *   X700
- *
  */
 
 #include <common.h>
 
-#ifdef CONFIG_ATI_RADEON_FB
-
 #include <command.h>
+#include <bios_emul.h>
 #include <pci.h>
 #include <asm/processor.h>
-#include <asm/errno.h>
+#include <linux/errno.h>
 #include <asm/io.h>
 #include <malloc.h>
 #include <video_fb.h>
 #define DPRINT(x...) do{}while(0)
 #endif
 
-#ifndef min_t
-#define min_t(type,x,y) \
-       ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
-#endif
-
 #define MAX_MAPPED_VRAM        (2048*2048*4)
 #define MIN_MAPPED_VRAM        (1024*768*1)
 
@@ -212,7 +189,7 @@ static void radeon_identify_vram(struct radeonfb_info *rinfo)
         * 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->vram_ddr ? "DDR" : "SDRAM",
               rinfo->vram_width);
@@ -568,7 +545,6 @@ void radeon_setmode_9200(int vesa_idx, int bpp)
 }
 
 #include "../bios_emulator/include/biosemu.h"
-extern int BootVideoCardBIOS(pci_dev_t pcidev, BE_VGAInfo ** pVGAInfo, int cleanUp);
 
 int radeon_probe(struct radeonfb_info *rinfo)
 {
@@ -588,18 +564,21 @@ int radeon_probe(struct radeonfb_info *rinfo)
                rinfo->pdev.device = did;
                rinfo->family = get_radeon_id_family(rinfo->pdev.device);
                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,
-                               &rinfo->mmio_base_phys);
-               rinfo->fb_base_phys &= 0xfffff000;
-               rinfo->mmio_base_phys &= ~0x04;
-
-               rinfo->mmio_base = (void *)rinfo->mmio_base_phys;
-               DPRINT("rinfo->mmio_base = 0x%x\n",rinfo->mmio_base);
+                               &rinfo->mmio_base_bus);
+               rinfo->fb_base_bus &= 0xfffff000;
+               rinfo->mmio_base_bus &= ~0x04;
+
+               rinfo->mmio_base = pci_bus_to_virt(pdev, rinfo->mmio_base_bus,
+                                       PCI_REGION_MEM, 0, MAP_NOCACHE);
+               DPRINT("rinfo->mmio_base = 0x%p bus=0x%x\n",
+                      rinfo->mmio_base, rinfo->mmio_base_bus);
                rinfo->fb_local_base = INREG(MC_FB_LOCATION) << 16;
                DPRINT("rinfo->fb_local_base = 0x%x\n",rinfo->fb_local_base);
                /* PostBIOS with x86 emulater */
-               BootVideoCardBIOS(pdev, NULL, 0);
+               if (!BootVideoCardBIOS(pdev, NULL, 0))
+                       return -1;
 
                /*
                 * Check for errata
@@ -612,14 +591,15 @@ int radeon_probe(struct radeonfb_info *rinfo)
 
                rinfo->mapped_vram = min_t(unsigned long, MAX_MAPPED_VRAM,
                                rinfo->video_ram);
-               rinfo->fb_base = (void *)rinfo->fb_base_phys;
-
-               DPRINT("Radeon: framebuffer base phy address 0x%08x," \
-                     "MMIO base phy address 0x%08x," \
-                     "framebuffer local base 0x%08x.\n ",
-                     rinfo->fb_base_phys, rinfo->mmio_base_phys,
-                     rinfo->fb_local_base);
-
+               rinfo->fb_base = pci_bus_to_virt(pdev, rinfo->fb_base_bus,
+                                       PCI_REGION_MEM, 0, MAP_NOCACHE);
+               DPRINT("Radeon: framebuffer base address 0x%08x, "
+                      "bus address 0x%08x\n"
+                      "MMIO base address 0x%08x, bus address 0x%08x, "
+                      "framebuffer local base 0x%08x.\n ",
+                      (u32)rinfo->fb_base, rinfo->fb_base_bus,
+                      (u32)rinfo->mmio_base, rinfo->mmio_base_bus,
+                      rinfo->fb_local_base);
                return 0;
        }
        return -1;
@@ -655,9 +635,10 @@ void *video_hw_init(void)
 
        tmp = 0;
 
-       videomode = CFG_DEFAULT_VIDEO_MODE;
+       videomode = CONFIG_SYS_DEFAULT_VIDEO_MODE;
        /* get video mode via environment */
-       if ((penv = getenv ("videomode")) != NULL) {
+       penv = env_get("videomode");
+       if (penv) {
                /* deceide if it is a string */
                if (penv[0] <= '9') {
                        videomode = (int) simple_strtoul (penv, NULL, 16);
@@ -674,7 +655,7 @@ void *video_hw_init(void)
                                break;
                }
                if (i == VESA_MODES_COUNT) {
-                       printf ("no VESA Mode found, switching to mode 0x%x ", CFG_DEFAULT_VIDEO_MODE);
+                       printf ("no VESA Mode found, switching to mode 0x%x ", CONFIG_SYS_DEFAULT_VIDEO_MODE);
                        i = 0;
                }
                res_mode = (struct ctfb_res_modes *) &res_mode_init[vesa_modes[i].resindex];
@@ -734,14 +715,14 @@ void *video_hw_init(void)
                break;
        }
 
-       pGD->isaBase = CFG_ISA_IO_BASE_ADDRESS;
-       pGD->pciBase = rinfo->fb_base_phys;
-       pGD->frameAdrs = rinfo->fb_base_phys;
+       pGD->isaBase = CONFIG_SYS_ISA_IO_BASE_ADDRESS;
+       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_phys;
+       pGD->dprBase = (pGD->winSizeX * pGD->winSizeY * pGD->gdfBytesPP) +
+               (unsigned int)rinfo->fb_base;
        if ((pGD->dprBase & 0x0fff) != 0) {
                /* allign it */
                pGD->dprBase &= 0xfffff000;
@@ -749,8 +730,8 @@ void *video_hw_init(void)
        }
        DPRINT ("Cursor Start %x Pattern Start %x\n", pGD->dprBase,
                PATTERN_ADR);
-       pGD->vprBase = rinfo->fb_base_phys;     /* Dummy */
-       pGD->cprBase = rinfo->fb_base_phys;     /* 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) */
@@ -777,4 +758,3 @@ void video_set_lut (unsigned int index,     /* color number */
        OUTREG(PALETTE_INDEX, index);
        OUTREG(PALETTE_DATA, (r << 16) | (g << 8) | b);
 }
-#endif