| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * |
|---|
| 3 | 4 | * Hardware accelerated Matrox Millennium I, II, Mystique, G100, G200 and G400 |
|---|
| .. | .. |
|---|
| 111 | 112 | #include "matroxfb_g450.h" |
|---|
| 112 | 113 | #include <linux/matroxfb.h> |
|---|
| 113 | 114 | #include <linux/interrupt.h> |
|---|
| 115 | +#include <linux/nvram.h> |
|---|
| 114 | 116 | #include <linux/slab.h> |
|---|
| 115 | 117 | #include <linux/uaccess.h> |
|---|
| 116 | 118 | |
|---|
| 117 | 119 | #ifdef CONFIG_PPC_PMAC |
|---|
| 118 | 120 | #include <asm/machdep.h> |
|---|
| 119 | | -unsigned char nvram_read_byte(int); |
|---|
| 120 | 121 | static int default_vmode = VMODE_NVRAM; |
|---|
| 121 | 122 | static int default_cmode = CMODE_NVRAM; |
|---|
| 122 | 123 | #endif |
|---|
| .. | .. |
|---|
| 1375 | 1376 | .accelID = FB_ACCEL_MATROX_MGAG200, |
|---|
| 1376 | 1377 | .lowlevel = &matrox_G100 |
|---|
| 1377 | 1378 | }; |
|---|
| 1379 | +static struct video_board vbG200eW = { |
|---|
| 1380 | + .maxvram = 0x1000000, |
|---|
| 1381 | + .maxdisplayable = 0x0800000, |
|---|
| 1382 | + .accelID = FB_ACCEL_MATROX_MGAG200, |
|---|
| 1383 | + .lowlevel = &matrox_G100 |
|---|
| 1384 | +}; |
|---|
| 1378 | 1385 | /* from doc it looks like that accelerator can draw only to low 16MB :-( Direct accesses & displaying are OK for |
|---|
| 1379 | 1386 | whole 32MB */ |
|---|
| 1380 | 1387 | static struct video_board vbG400 = { |
|---|
| .. | .. |
|---|
| 1493 | 1500 | MGA_G200, |
|---|
| 1494 | 1501 | &vbG200, |
|---|
| 1495 | 1502 | "MGA-G200 (PCI)"}, |
|---|
| 1503 | + {PCI_VENDOR_ID_MATROX, 0x0532, 0xFF, |
|---|
| 1504 | + 0, 0, |
|---|
| 1505 | + DEVF_G200, |
|---|
| 1506 | + 250000, |
|---|
| 1507 | + MGA_G200, |
|---|
| 1508 | + &vbG200eW, |
|---|
| 1509 | + "MGA-G200eW (PCI)"}, |
|---|
| 1496 | 1510 | {PCI_VENDOR_ID_MATROX, PCI_DEVICE_ID_MATROX_G200_AGP, 0xFF, |
|---|
| 1497 | 1511 | PCI_SS_VENDOR_ID_MATROX, PCI_SS_ID_MATROX_GENERIC, |
|---|
| 1498 | 1512 | DEVF_G200, |
|---|
| .. | .. |
|---|
| 1709 | 1723 | memsize = mem; |
|---|
| 1710 | 1724 | err = -ENOMEM; |
|---|
| 1711 | 1725 | |
|---|
| 1712 | | - minfo->mmio.vbase.vaddr = ioremap_nocache(ctrlptr_phys, 16384); |
|---|
| 1726 | + minfo->mmio.vbase.vaddr = ioremap(ctrlptr_phys, 16384); |
|---|
| 1713 | 1727 | if (!minfo->mmio.vbase.vaddr) { |
|---|
| 1714 | 1728 | printk(KERN_ERR "matroxfb: cannot ioremap(%lX, 16384), matroxfb disabled\n", ctrlptr_phys); |
|---|
| 1715 | 1729 | goto failVideoMR; |
|---|
| .. | .. |
|---|
| 1872 | 1886 | #ifndef MODULE |
|---|
| 1873 | 1887 | if (machine_is(powermac)) { |
|---|
| 1874 | 1888 | struct fb_var_screeninfo var; |
|---|
| 1889 | + |
|---|
| 1875 | 1890 | if (default_vmode <= 0 || default_vmode > VMODE_MAX) |
|---|
| 1876 | 1891 | default_vmode = VMODE_640_480_60; |
|---|
| 1877 | | -#ifdef CONFIG_NVRAM |
|---|
| 1878 | | - if (default_cmode == CMODE_NVRAM) |
|---|
| 1892 | +#if defined(CONFIG_PPC32) |
|---|
| 1893 | + if (IS_REACHABLE(CONFIG_NVRAM) && default_cmode == CMODE_NVRAM) |
|---|
| 1879 | 1894 | default_cmode = nvram_read_byte(NV_CMODE); |
|---|
| 1880 | 1895 | #endif |
|---|
| 1881 | 1896 | if (default_cmode < CMODE_8 || default_cmode > CMODE_32) |
|---|
| .. | .. |
|---|
| 2133 | 2148 | {PCI_VENDOR_ID_MATROX, PCI_DEVICE_ID_MATROX_G100_AGP, |
|---|
| 2134 | 2149 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, |
|---|
| 2135 | 2150 | {PCI_VENDOR_ID_MATROX, PCI_DEVICE_ID_MATROX_G200_PCI, |
|---|
| 2151 | + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, |
|---|
| 2152 | + {PCI_VENDOR_ID_MATROX, 0x0532, |
|---|
| 2136 | 2153 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, |
|---|
| 2137 | 2154 | {PCI_VENDOR_ID_MATROX, PCI_DEVICE_ID_MATROX_G200_AGP, |
|---|
| 2138 | 2155 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, |
|---|
| .. | .. |
|---|
| 2500 | 2517 | module_param(noinit, int, 0); |
|---|
| 2501 | 2518 | MODULE_PARM_DESC(noinit, "Disables W/SG/SD-RAM and bus interface initialization (0 or 1=do not initialize) (default=0)"); |
|---|
| 2502 | 2519 | module_param(memtype, int, 0); |
|---|
| 2503 | | -MODULE_PARM_DESC(memtype, "Memory type for G200/G400 (see Documentation/fb/matroxfb.txt for explanation) (default=3 for G200, 0 for G400)"); |
|---|
| 2520 | +MODULE_PARM_DESC(memtype, "Memory type for G200/G400 (see Documentation/fb/matroxfb.rst for explanation) (default=3 for G200, 0 for G400)"); |
|---|
| 2504 | 2521 | module_param(mtrr, int, 0); |
|---|
| 2505 | 2522 | MODULE_PARM_DESC(mtrr, "This speeds up video memory accesses (0=disabled or 1) (default=1)"); |
|---|
| 2506 | 2523 | module_param(sgram, int, 0); |
|---|