Hi,

questions will follow.

---

diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c 
b/drivers/gpu/drm/nouveau/nouveau_bios.c
index 99f7bd4..13b3fb1 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bios.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bios.c
@@ -40,8 +40,6 @@
 #define BIOSLOG(sip, fmt, arg...) NV_DEBUG(sip->dev, fmt, ##arg)
 #define LOG_OLD_VALUE(x) //x
 
-#define BIOS_USLEEP(n) mdelay((n)/1000)
-
 #define ROM16(x) le16_to_cpu(*(uint16_t *)&(x))
 #define ROM32(x) le32_to_cpu(*(uint32_t *)&(x))
 
@@ -50,6 +48,15 @@ struct init_exec {
        bool repeat;
 };
 
+static inline void bios_usleep(unsigned usecs)
+{
+       might_sleep();
+       if (usecs < 1000 * MAX_UDELAY_MS)
+               udelay(usecs);
+       else
+               msleep(usecs / 1000 + 1);
+}
+
 static bool nv_cksum(const uint8_t *data, unsigned int length)
 {
        /* there's a few checksums in the BIOS, so here's a generic checking 
function */
@@ -262,7 +269,7 @@ static int parse_init_table(struct nvbios *, unsigned int, 
struct init_exec *);
 static void still_alive(void)
 {
 //     sync();
-//     BIOS_USLEEP(2000);
+//     bios_usleep(2000);
 }
 
 static uint32_t
@@ -1608,17 +1615,18 @@ init_condition_time(struct nvbios *bios, uint16_t 
offset,
 
        for (; retries > 0; retries--)
                if (bios_condition_met(bios, offset, cond)) {
-                       BIOSLOG(bios, "0x%04X: Condition met, continuing\n", 
offset);
+                       BIOSLOG(bios, "0x%04X: Condition met, continuing\n",
+                                                               offset);
                        break;
                } else {
                        BIOSLOG(bios, "0x%04X: Condition not met, sleeping for 
20ms\n", offset);
-                       BIOS_USLEEP(20000);
+                       bios_usleep(20000);
                }
 
        if (!bios_condition_met(bios, offset, cond)) {
                NV_WARN(bios->dev,
                        "0x%04X: Condition still not met after %dms, "
-                       "skiping following opcodes\n", offset, 20 * retries);
+                       "skipping following opcodes\n", offset, 20 * retries);
                iexec->execute = false;
        }
 
@@ -1851,7 +1859,7 @@ init_reset(struct nvbios *bios, uint16_t offset, struct 
init_exec *iexec)
        bios_wr32(bios, NV_PBUS_PCI_NV_19, 0);
        bios_wr32(bios, reg, value1);
 
-       BIOS_USLEEP(10);
+       bios_usleep(10);
 
        bios_wr32(bios, reg, value2);
        bios_wr32(bios, NV_PBUS_PCI_NV_19, pci_nv_19);
@@ -2233,8 +2241,7 @@ init_time(struct nvbios *bios, uint16_t offset, struct 
init_exec *iexec)
        BIOSLOG(bios, "0x%04X: Sleeping for 0x%04X microseconds\n",
                offset, time);
 
-       BIOS_USLEEP(time);
-
+       bios_usleep(time);
        return true;
 }
 
@@ -2872,9 +2879,11 @@ static int call_lvds_manufacturer_script(struct 
drm_device *dev, struct dcb_entr
 
        run_digital_op_script(dev, scriptofs, dcbent, head, bios->fp.dual_link);
 
-       if (script == LVDS_PANEL_OFF)
+       if (script == LVDS_PANEL_OFF) {
                /* off-on delay in ms */
-               BIOS_USLEEP(ROM16(bios->data[bios->fp.xlated_entry + 7]));
+               bios_usleep(ROM16(bios->data[bios->fp.xlated_entry + 7]));
+       }
+
 #ifdef __powerpc__
        /* Powerbook specific quirks */
        if (script == LVDS_RESET && ((dev->pci_device & 0xffff) == 0x0179 || 
(dev->pci_device & 0xffff) == 0x0329))

_______________________________________________
Nouveau mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to