Merge branch 'linux-4.10' of git://github.com/skeggsb/linux into drm-next
- BIT_PERF_PTRS uses 32-bit pointers to its subtables, we were parsing them as 16-bit, causing various issues on newer boards. - Support for MXM on GM20x and up. - More display-related fixes. * 'linux-4.10' of git://github.com/skeggsb/linux: drm/nouveau/mxm: warn more loudly on unsupported DCB version drm/nouveau/mxm: handle DCB 4.1 modification drm/nouveau/bios/mxm: handle digital connector table 1.1 drm/nouveau: Queue hpd_work on (runtime) resume drm/nouveau: Rename acpi_work to hpd_work drm/nouveau/kms/nv50: Fix atomic pageflip events. drm/nouveau/fb/ram/gp100-: fix memory detection where FBP_NUM != FBPA_NUM drm/nouveau/bios/volt: pointers are 32-bit drm/nouveau/bios/vmap: pointers are 32-bit drm/nouveau/bios/timing: pointers are 32-bit drm/nouveau/bios/therm: pointers are 32-bit drm/nouveau/bios/perf: pointers are 32-bit drm/nouveau/bios/iccsense: pointers are 32-bit drm/nouveau/bios/fan: pointers are 32-bit drm/nouveau/bios/cstep: pointers are 32-bit drm/nouveau/bios/boost: pointers are 32-bit
This commit is contained in:
commit
9ac63d9973
|
@ -1,6 +1,6 @@
|
|||
#ifndef __NVBIOS_BOOST_H__
|
||||
#define __NVBIOS_BOOST_H__
|
||||
u16 nvbios_boostTe(struct nvkm_bios *, u8 *, u8 *, u8 *, u8 *, u8 *, u8 *);
|
||||
u32 nvbios_boostTe(struct nvkm_bios *, u8 *, u8 *, u8 *, u8 *, u8 *, u8 *);
|
||||
|
||||
struct nvbios_boostE {
|
||||
u8 pstate;
|
||||
|
@ -8,10 +8,10 @@ struct nvbios_boostE {
|
|||
u32 max;
|
||||
};
|
||||
|
||||
u16 nvbios_boostEe(struct nvkm_bios *, int idx, u8 *, u8 *, u8 *, u8 *);
|
||||
u16 nvbios_boostEp(struct nvkm_bios *, int idx, u8 *, u8 *, u8 *, u8 *,
|
||||
u32 nvbios_boostEe(struct nvkm_bios *, int idx, u8 *, u8 *, u8 *, u8 *);
|
||||
u32 nvbios_boostEp(struct nvkm_bios *, int idx, u8 *, u8 *, u8 *, u8 *,
|
||||
struct nvbios_boostE *);
|
||||
u16 nvbios_boostEm(struct nvkm_bios *, u8, u8 *, u8 *, u8 *, u8 *,
|
||||
u32 nvbios_boostEm(struct nvkm_bios *, u8, u8 *, u8 *, u8 *, u8 *,
|
||||
struct nvbios_boostE *);
|
||||
|
||||
struct nvbios_boostS {
|
||||
|
@ -21,7 +21,7 @@ struct nvbios_boostS {
|
|||
u32 max;
|
||||
};
|
||||
|
||||
u16 nvbios_boostSe(struct nvkm_bios *, int, u16, u8 *, u8 *, u8, u8);
|
||||
u16 nvbios_boostSp(struct nvkm_bios *, int, u16, u8 *, u8 *, u8, u8,
|
||||
u32 nvbios_boostSe(struct nvkm_bios *, int, u32, u8 *, u8 *, u8, u8);
|
||||
u32 nvbios_boostSp(struct nvkm_bios *, int, u32, u8 *, u8 *, u8, u8,
|
||||
struct nvbios_boostS *);
|
||||
#endif
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#ifndef __NVBIOS_CSTEP_H__
|
||||
#define __NVBIOS_CSTEP_H__
|
||||
u16 nvbios_cstepTe(struct nvkm_bios *,
|
||||
u32 nvbios_cstepTe(struct nvkm_bios *,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len, u8 *xnr, u8 *xsz);
|
||||
|
||||
struct nvbios_cstepE {
|
||||
|
@ -8,10 +8,10 @@ struct nvbios_cstepE {
|
|||
u8 index;
|
||||
};
|
||||
|
||||
u16 nvbios_cstepEe(struct nvkm_bios *, int idx, u8 *ver, u8 *hdr);
|
||||
u16 nvbios_cstepEp(struct nvkm_bios *, int idx, u8 *ver, u8 *hdr,
|
||||
u32 nvbios_cstepEe(struct nvkm_bios *, int idx, u8 *ver, u8 *hdr);
|
||||
u32 nvbios_cstepEp(struct nvkm_bios *, int idx, u8 *ver, u8 *hdr,
|
||||
struct nvbios_cstepE *);
|
||||
u16 nvbios_cstepEm(struct nvkm_bios *, u8 pstate, u8 *ver, u8 *hdr,
|
||||
u32 nvbios_cstepEm(struct nvkm_bios *, u8 pstate, u8 *ver, u8 *hdr,
|
||||
struct nvbios_cstepE *);
|
||||
|
||||
struct nvbios_cstepX {
|
||||
|
@ -20,7 +20,7 @@ struct nvbios_cstepX {
|
|||
u8 voltage;
|
||||
};
|
||||
|
||||
u16 nvbios_cstepXe(struct nvkm_bios *, int idx, u8 *ver, u8 *hdr);
|
||||
u16 nvbios_cstepXp(struct nvkm_bios *, int idx, u8 *ver, u8 *hdr,
|
||||
u32 nvbios_cstepXe(struct nvkm_bios *, int idx, u8 *ver, u8 *hdr);
|
||||
u32 nvbios_cstepXp(struct nvkm_bios *, int idx, u8 *ver, u8 *hdr,
|
||||
struct nvbios_cstepX *);
|
||||
#endif
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
#define __NVBIOS_FAN_H__
|
||||
#include <subdev/bios/therm.h>
|
||||
|
||||
u16 nvbios_fan_parse(struct nvkm_bios *bios, struct nvbios_therm_fan *fan);
|
||||
u32 nvbios_fan_parse(struct nvkm_bios *bios, struct nvbios_therm_fan *fan);
|
||||
#endif
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#ifndef __NVBIOS_PERF_H__
|
||||
#define __NVBIOS_PERF_H__
|
||||
u16 nvbios_perf_table(struct nvkm_bios *, u8 *ver, u8 *hdr,
|
||||
u32 nvbios_perf_table(struct nvkm_bios *, u8 *ver, u8 *hdr,
|
||||
u8 *cnt, u8 *len, u8 *snr, u8 *ssz);
|
||||
|
||||
struct nvbios_perfE {
|
||||
|
@ -17,9 +17,9 @@ struct nvbios_perfE {
|
|||
u8 pcie_width;
|
||||
};
|
||||
|
||||
u16 nvbios_perf_entry(struct nvkm_bios *, int idx,
|
||||
u32 nvbios_perf_entry(struct nvkm_bios *, int idx,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len);
|
||||
u16 nvbios_perfEp(struct nvkm_bios *, int idx,
|
||||
u32 nvbios_perfEp(struct nvkm_bios *, int idx,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_perfE *);
|
||||
|
||||
struct nvbios_perfS {
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
#define __NVBIOS_TIMING_H__
|
||||
#include <subdev/bios/ramcfg.h>
|
||||
|
||||
u16 nvbios_timingTe(struct nvkm_bios *,
|
||||
u32 nvbios_timingTe(struct nvkm_bios *,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len, u8 *snr, u8 *ssz);
|
||||
u16 nvbios_timingEe(struct nvkm_bios *, int idx,
|
||||
u32 nvbios_timingEe(struct nvkm_bios *, int idx,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len);
|
||||
u16 nvbios_timingEp(struct nvkm_bios *, int idx,
|
||||
u32 nvbios_timingEp(struct nvkm_bios *, int idx,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_ramcfg *);
|
||||
#endif
|
||||
|
|
|
@ -6,8 +6,8 @@ struct nvbios_vmap {
|
|||
u8 max2;
|
||||
};
|
||||
|
||||
u16 nvbios_vmap_table(struct nvkm_bios *, u8 *ver, u8 *hdr, u8 *cnt, u8 *len);
|
||||
u16 nvbios_vmap_parse(struct nvkm_bios *, u8 *ver, u8 *hdr, u8 *cnt, u8 *len,
|
||||
u32 nvbios_vmap_table(struct nvkm_bios *, u8 *ver, u8 *hdr, u8 *cnt, u8 *len);
|
||||
u32 nvbios_vmap_parse(struct nvkm_bios *, u8 *ver, u8 *hdr, u8 *cnt, u8 *len,
|
||||
struct nvbios_vmap *);
|
||||
|
||||
struct nvbios_vmap_entry {
|
||||
|
@ -18,7 +18,7 @@ struct nvbios_vmap_entry {
|
|||
s32 arg[6];
|
||||
};
|
||||
|
||||
u16 nvbios_vmap_entry(struct nvkm_bios *, int idx, u8 *ver, u8 *len);
|
||||
u16 nvbios_vmap_entry_parse(struct nvkm_bios *, int idx, u8 *ver, u8 *len,
|
||||
u32 nvbios_vmap_entry(struct nvkm_bios *, int idx, u8 *ver, u8 *len);
|
||||
u32 nvbios_vmap_entry_parse(struct nvkm_bios *, int idx, u8 *ver, u8 *len,
|
||||
struct nvbios_vmap_entry *);
|
||||
#endif
|
||||
|
|
|
@ -22,8 +22,8 @@ struct nvbios_volt {
|
|||
u32 pwm_range;
|
||||
};
|
||||
|
||||
u16 nvbios_volt_table(struct nvkm_bios *, u8 *ver, u8 *hdr, u8 *cnt, u8 *len);
|
||||
u16 nvbios_volt_parse(struct nvkm_bios *, u8 *ver, u8 *hdr, u8 *cnt, u8 *len,
|
||||
u32 nvbios_volt_table(struct nvkm_bios *, u8 *ver, u8 *hdr, u8 *cnt, u8 *len);
|
||||
u32 nvbios_volt_parse(struct nvkm_bios *, u8 *ver, u8 *hdr, u8 *cnt, u8 *len,
|
||||
struct nvbios_volt *);
|
||||
|
||||
struct nvbios_volt_entry {
|
||||
|
@ -31,7 +31,7 @@ struct nvbios_volt_entry {
|
|||
u8 vid;
|
||||
};
|
||||
|
||||
u16 nvbios_volt_entry(struct nvkm_bios *, int idx, u8 *ver, u8 *len);
|
||||
u16 nvbios_volt_entry_parse(struct nvkm_bios *, int idx, u8 *ver, u8 *len,
|
||||
u32 nvbios_volt_entry(struct nvkm_bios *, int idx, u8 *ver, u8 *len);
|
||||
u32 nvbios_volt_entry_parse(struct nvkm_bios *, int idx, u8 *ver, u8 *len,
|
||||
struct nvbios_volt_entry *);
|
||||
#endif
|
||||
|
|
|
@ -349,6 +349,19 @@ static struct nouveau_drm_prop_enum_list dither_depth[] = {
|
|||
} \
|
||||
} while(0)
|
||||
|
||||
static void
|
||||
nouveau_display_hpd_work(struct work_struct *work)
|
||||
{
|
||||
struct nouveau_drm *drm = container_of(work, typeof(*drm), hpd_work);
|
||||
|
||||
pm_runtime_get_sync(drm->dev->dev);
|
||||
|
||||
drm_helper_hpd_irq_event(drm->dev);
|
||||
|
||||
pm_runtime_mark_last_busy(drm->dev->dev);
|
||||
pm_runtime_put_sync(drm->dev->dev);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
|
||||
/*
|
||||
|
@ -360,19 +373,6 @@ static struct nouveau_drm_prop_enum_list dither_depth[] = {
|
|||
#define ACPI_VIDEO_NOTIFY_PROBE 0x81
|
||||
#endif
|
||||
|
||||
static void
|
||||
nouveau_display_acpi_work(struct work_struct *work)
|
||||
{
|
||||
struct nouveau_drm *drm = container_of(work, typeof(*drm), acpi_work);
|
||||
|
||||
pm_runtime_get_sync(drm->dev->dev);
|
||||
|
||||
drm_helper_hpd_irq_event(drm->dev);
|
||||
|
||||
pm_runtime_mark_last_busy(drm->dev->dev);
|
||||
pm_runtime_put_sync(drm->dev->dev);
|
||||
}
|
||||
|
||||
static int
|
||||
nouveau_display_acpi_ntfy(struct notifier_block *nb, unsigned long val,
|
||||
void *data)
|
||||
|
@ -385,9 +385,9 @@ nouveau_display_acpi_ntfy(struct notifier_block *nb, unsigned long val,
|
|||
/*
|
||||
* This may be the only indication we receive of a
|
||||
* connector hotplug on a runtime suspended GPU,
|
||||
* schedule acpi_work to check.
|
||||
* schedule hpd_work to check.
|
||||
*/
|
||||
schedule_work(&drm->acpi_work);
|
||||
schedule_work(&drm->hpd_work);
|
||||
|
||||
/* acpi-video should not generate keypresses for this */
|
||||
return NOTIFY_BAD;
|
||||
|
@ -582,8 +582,8 @@ nouveau_display_create(struct drm_device *dev)
|
|||
}
|
||||
|
||||
nouveau_backlight_init(dev);
|
||||
INIT_WORK(&drm->hpd_work, nouveau_display_hpd_work);
|
||||
#ifdef CONFIG_ACPI
|
||||
INIT_WORK(&drm->acpi_work, nouveau_display_acpi_work);
|
||||
drm->acpi_nb.notifier_call = nouveau_display_acpi_ntfy;
|
||||
register_acpi_notifier(&drm->acpi_nb);
|
||||
#endif
|
||||
|
|
|
@ -699,7 +699,12 @@ nouveau_pmops_resume(struct device *dev)
|
|||
return ret;
|
||||
pci_set_master(pdev);
|
||||
|
||||
return nouveau_do_resume(drm_dev, false);
|
||||
ret = nouveau_do_resume(drm_dev, false);
|
||||
|
||||
/* Monitors may have been connected / disconnected during suspend */
|
||||
schedule_work(&nouveau_drm(drm_dev)->hpd_work);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -773,6 +778,10 @@ nouveau_pmops_runtime_resume(struct device *dev)
|
|||
nvif_mask(&device->object, 0x088488, (1 << 25), (1 << 25));
|
||||
vga_switcheroo_set_dynamic_switch(pdev, VGA_SWITCHEROO_ON);
|
||||
drm_dev->switch_power_state = DRM_SWITCH_POWER_ON;
|
||||
|
||||
/* Monitors may have been connected / disconnected during suspend */
|
||||
schedule_work(&nouveau_drm(drm_dev)->hpd_work);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -163,9 +163,9 @@ struct nouveau_drm {
|
|||
struct nvbios vbios;
|
||||
struct nouveau_display *display;
|
||||
struct backlight_device *backlight;
|
||||
struct work_struct hpd_work;
|
||||
#ifdef CONFIG_ACPI
|
||||
struct notifier_block acpi_nb;
|
||||
struct work_struct acpi_work;
|
||||
#endif
|
||||
|
||||
/* power management */
|
||||
|
|
|
@ -4090,6 +4090,8 @@ nv50_disp_atomic_commit_tail(struct drm_atomic_state *state)
|
|||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
if (crtc->state->event) {
|
||||
unsigned long flags;
|
||||
/* Get correct count/ts if racing with vblank irq */
|
||||
drm_accurate_vblank_count(crtc);
|
||||
spin_lock_irqsave(&crtc->dev->event_lock, flags);
|
||||
drm_crtc_send_vblank_event(crtc, crtc->state->event);
|
||||
spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
|
||||
|
|
|
@ -25,16 +25,16 @@
|
|||
#include <subdev/bios/bit.h>
|
||||
#include <subdev/bios/boost.h>
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_boostTe(struct nvkm_bios *bios,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len, u8 *snr, u8 *ssz)
|
||||
{
|
||||
struct bit_entry bit_P;
|
||||
u16 boost = 0x0000;
|
||||
u32 boost = 0;
|
||||
|
||||
if (!bit_entry(bios, 'P', &bit_P)) {
|
||||
if (bit_P.version == 2)
|
||||
boost = nvbios_rd16(bios, bit_P.offset + 0x30);
|
||||
boost = nvbios_rd32(bios, bit_P.offset + 0x30);
|
||||
|
||||
if (boost) {
|
||||
*ver = nvbios_rd08(bios, boost + 0);
|
||||
|
@ -52,15 +52,15 @@ nvbios_boostTe(struct nvkm_bios *bios,
|
|||
}
|
||||
}
|
||||
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_boostEe(struct nvkm_bios *bios, int idx,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
|
||||
{
|
||||
u8 snr, ssz;
|
||||
u16 data = nvbios_boostTe(bios, ver, hdr, cnt, len, &snr, &ssz);
|
||||
u32 data = nvbios_boostTe(bios, ver, hdr, cnt, len, &snr, &ssz);
|
||||
if (data && idx < *cnt) {
|
||||
data = data + *hdr + (idx * (*len + (snr * ssz)));
|
||||
*hdr = *len;
|
||||
|
@ -68,14 +68,14 @@ nvbios_boostEe(struct nvkm_bios *bios, int idx,
|
|||
*len = ssz;
|
||||
return data;
|
||||
}
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_boostEp(struct nvkm_bios *bios, int idx,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_boostE *info)
|
||||
{
|
||||
u16 data = nvbios_boostEe(bios, idx, ver, hdr, cnt, len);
|
||||
u32 data = nvbios_boostEe(bios, idx, ver, hdr, cnt, len);
|
||||
memset(info, 0x00, sizeof(*info));
|
||||
if (data) {
|
||||
info->pstate = (nvbios_rd16(bios, data + 0x00) & 0x01e0) >> 5;
|
||||
|
@ -85,7 +85,7 @@ nvbios_boostEp(struct nvkm_bios *bios, int idx,
|
|||
return data;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_boostEm(struct nvkm_bios *bios, u8 pstate,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_boostE *info)
|
||||
{
|
||||
|
@ -97,21 +97,21 @@ nvbios_boostEm(struct nvkm_bios *bios, u8 pstate,
|
|||
return data;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_boostSe(struct nvkm_bios *bios, int idx,
|
||||
u16 data, u8 *ver, u8 *hdr, u8 cnt, u8 len)
|
||||
u32 data, u8 *ver, u8 *hdr, u8 cnt, u8 len)
|
||||
{
|
||||
if (data && idx < cnt) {
|
||||
data = data + *hdr + (idx * len);
|
||||
*hdr = len;
|
||||
return data;
|
||||
}
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_boostSp(struct nvkm_bios *bios, int idx,
|
||||
u16 data, u8 *ver, u8 *hdr, u8 cnt, u8 len,
|
||||
u32 data, u8 *ver, u8 *hdr, u8 cnt, u8 len,
|
||||
struct nvbios_boostS *info)
|
||||
{
|
||||
data = nvbios_boostSe(bios, idx, data, ver, hdr, cnt, len);
|
||||
|
|
|
@ -25,16 +25,16 @@
|
|||
#include <subdev/bios/bit.h>
|
||||
#include <subdev/bios/cstep.h>
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_cstepTe(struct nvkm_bios *bios,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len, u8 *xnr, u8 *xsz)
|
||||
{
|
||||
struct bit_entry bit_P;
|
||||
u16 cstep = 0x0000;
|
||||
u32 cstep = 0;
|
||||
|
||||
if (!bit_entry(bios, 'P', &bit_P)) {
|
||||
if (bit_P.version == 2)
|
||||
cstep = nvbios_rd16(bios, bit_P.offset + 0x34);
|
||||
cstep = nvbios_rd32(bios, bit_P.offset + 0x34);
|
||||
|
||||
if (cstep) {
|
||||
*ver = nvbios_rd08(bios, cstep + 0);
|
||||
|
@ -52,27 +52,27 @@ nvbios_cstepTe(struct nvkm_bios *bios,
|
|||
}
|
||||
}
|
||||
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_cstepEe(struct nvkm_bios *bios, int idx, u8 *ver, u8 *hdr)
|
||||
{
|
||||
u8 cnt, len, xnr, xsz;
|
||||
u16 data = nvbios_cstepTe(bios, ver, hdr, &cnt, &len, &xnr, &xsz);
|
||||
u32 data = nvbios_cstepTe(bios, ver, hdr, &cnt, &len, &xnr, &xsz);
|
||||
if (data && idx < cnt) {
|
||||
data = data + *hdr + (idx * len);
|
||||
*hdr = len;
|
||||
return data;
|
||||
}
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_cstepEp(struct nvkm_bios *bios, int idx, u8 *ver, u8 *hdr,
|
||||
struct nvbios_cstepE *info)
|
||||
{
|
||||
u16 data = nvbios_cstepEe(bios, idx, ver, hdr);
|
||||
u32 data = nvbios_cstepEe(bios, idx, ver, hdr);
|
||||
memset(info, 0x00, sizeof(*info));
|
||||
if (data) {
|
||||
info->pstate = (nvbios_rd16(bios, data + 0x00) & 0x01e0) >> 5;
|
||||
|
@ -81,7 +81,7 @@ nvbios_cstepEp(struct nvkm_bios *bios, int idx, u8 *ver, u8 *hdr,
|
|||
return data;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_cstepEm(struct nvkm_bios *bios, u8 pstate, u8 *ver, u8 *hdr,
|
||||
struct nvbios_cstepE *info)
|
||||
{
|
||||
|
@ -93,24 +93,24 @@ nvbios_cstepEm(struct nvkm_bios *bios, u8 pstate, u8 *ver, u8 *hdr,
|
|||
return data;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_cstepXe(struct nvkm_bios *bios, int idx, u8 *ver, u8 *hdr)
|
||||
{
|
||||
u8 cnt, len, xnr, xsz;
|
||||
u16 data = nvbios_cstepTe(bios, ver, hdr, &cnt, &len, &xnr, &xsz);
|
||||
u32 data = nvbios_cstepTe(bios, ver, hdr, &cnt, &len, &xnr, &xsz);
|
||||
if (data && idx < xnr) {
|
||||
data = data + *hdr + (cnt * len) + (idx * xsz);
|
||||
*hdr = xsz;
|
||||
return data;
|
||||
}
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_cstepXp(struct nvkm_bios *bios, int idx, u8 *ver, u8 *hdr,
|
||||
struct nvbios_cstepX *info)
|
||||
{
|
||||
u16 data = nvbios_cstepXe(bios, idx, ver, hdr);
|
||||
u32 data = nvbios_cstepXe(bios, idx, ver, hdr);
|
||||
memset(info, 0x00, sizeof(*info));
|
||||
if (data) {
|
||||
info->freq = nvbios_rd16(bios, data + 0x00) * 1000;
|
||||
|
|
|
@ -25,15 +25,15 @@
|
|||
#include <subdev/bios/bit.h>
|
||||
#include <subdev/bios/fan.h>
|
||||
|
||||
static u16
|
||||
static u32
|
||||
nvbios_fan_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
|
||||
{
|
||||
struct bit_entry bit_P;
|
||||
u16 fan = 0x0000;
|
||||
u32 fan = 0;
|
||||
|
||||
if (!bit_entry(bios, 'P', &bit_P)) {
|
||||
if (bit_P.version == 2 && bit_P.length >= 0x5a)
|
||||
fan = nvbios_rd16(bios, bit_P.offset + 0x58);
|
||||
fan = nvbios_rd32(bios, bit_P.offset + 0x58);
|
||||
|
||||
if (fan) {
|
||||
*ver = nvbios_rd08(bios, fan + 0);
|
||||
|
@ -49,25 +49,25 @@ nvbios_fan_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
|
|||
}
|
||||
}
|
||||
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u16
|
||||
static u32
|
||||
nvbios_fan_entry(struct nvkm_bios *bios, int idx, u8 *ver, u8 *hdr,
|
||||
u8 *cnt, u8 *len)
|
||||
{
|
||||
u16 data = nvbios_fan_table(bios, ver, hdr, cnt, len);
|
||||
u32 data = nvbios_fan_table(bios, ver, hdr, cnt, len);
|
||||
if (data && idx < *cnt)
|
||||
return data + *hdr + (idx * (*len));
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_fan_parse(struct nvkm_bios *bios, struct nvbios_therm_fan *fan)
|
||||
{
|
||||
u8 ver, hdr, cnt, len;
|
||||
|
||||
u16 data = nvbios_fan_entry(bios, 0, &ver, &hdr, &cnt, &len);
|
||||
u32 data = nvbios_fan_entry(bios, 0, &ver, &hdr, &cnt, &len);
|
||||
if (data) {
|
||||
u8 type = nvbios_rd08(bios, data + 0x00);
|
||||
switch (type) {
|
||||
|
|
|
@ -26,18 +26,18 @@
|
|||
#include <subdev/bios/extdev.h>
|
||||
#include <subdev/bios/iccsense.h>
|
||||
|
||||
static u16
|
||||
static u32
|
||||
nvbios_iccsense_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt,
|
||||
u8 *len)
|
||||
{
|
||||
struct bit_entry bit_P;
|
||||
u16 iccsense;
|
||||
u32 iccsense;
|
||||
|
||||
if (bit_entry(bios, 'P', &bit_P) || bit_P.version != 2 ||
|
||||
bit_P.length < 0x2c)
|
||||
return 0;
|
||||
|
||||
iccsense = nvbios_rd16(bios, bit_P.offset + 0x28);
|
||||
iccsense = nvbios_rd32(bios, bit_P.offset + 0x28);
|
||||
if (!iccsense)
|
||||
return 0;
|
||||
|
||||
|
@ -61,7 +61,7 @@ nvbios_iccsense_parse(struct nvkm_bios *bios, struct nvbios_iccsense *iccsense)
|
|||
{
|
||||
struct nvkm_subdev *subdev = &bios->subdev;
|
||||
u8 ver, hdr, cnt, len, i;
|
||||
u16 table, entry;
|
||||
u32 table, entry;
|
||||
|
||||
table = nvbios_iccsense_table(bios, &ver, &hdr, &cnt, &len);
|
||||
if (!table || !cnt)
|
||||
|
|
|
@ -81,7 +81,7 @@ mxm_sor_map(struct nvkm_bios *bios, u8 conn)
|
|||
u16 map = nvbios_rd16(bios, mxm + 4);
|
||||
if (map) {
|
||||
ver = nvbios_rd08(bios, map);
|
||||
if (ver == 0x10) {
|
||||
if (ver == 0x10 || ver == 0x11) {
|
||||
if (conn < nvbios_rd08(bios, map + 3)) {
|
||||
map += nvbios_rd08(bios, map + 1);
|
||||
map += conn;
|
||||
|
|
|
@ -26,16 +26,16 @@
|
|||
#include <subdev/bios/perf.h>
|
||||
#include <subdev/pci.h>
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_perf_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr,
|
||||
u8 *cnt, u8 *len, u8 *snr, u8 *ssz)
|
||||
{
|
||||
struct bit_entry bit_P;
|
||||
u16 perf = 0x0000;
|
||||
u32 perf = 0;
|
||||
|
||||
if (!bit_entry(bios, 'P', &bit_P)) {
|
||||
if (bit_P.version <= 2) {
|
||||
perf = nvbios_rd16(bios, bit_P.offset + 0);
|
||||
perf = nvbios_rd32(bios, bit_P.offset + 0);
|
||||
if (perf) {
|
||||
*ver = nvbios_rd08(bios, perf + 0);
|
||||
*hdr = nvbios_rd08(bios, perf + 1);
|
||||
|
@ -72,15 +72,15 @@ nvbios_perf_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr,
|
|||
}
|
||||
}
|
||||
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_perf_entry(struct nvkm_bios *bios, int idx,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
|
||||
{
|
||||
u8 snr, ssz;
|
||||
u16 perf = nvbios_perf_table(bios, ver, hdr, cnt, len, &snr, &ssz);
|
||||
u32 perf = nvbios_perf_table(bios, ver, hdr, cnt, len, &snr, &ssz);
|
||||
if (perf && idx < *cnt) {
|
||||
perf = perf + *hdr + (idx * (*len + (snr * ssz)));
|
||||
*hdr = *len;
|
||||
|
@ -88,14 +88,14 @@ nvbios_perf_entry(struct nvkm_bios *bios, int idx,
|
|||
*len = ssz;
|
||||
return perf;
|
||||
}
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_perfEp(struct nvkm_bios *bios, int idx,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_perfE *info)
|
||||
{
|
||||
u16 perf = nvbios_perf_entry(bios, idx, ver, hdr, cnt, len);
|
||||
u32 perf = nvbios_perf_entry(bios, idx, ver, hdr, cnt, len);
|
||||
memset(info, 0x00, sizeof(*info));
|
||||
info->pstate = nvbios_rd08(bios, perf + 0x00);
|
||||
switch (!!perf * *ver) {
|
||||
|
@ -163,7 +163,7 @@ nvbios_perfEp(struct nvkm_bios *bios, int idx,
|
|||
info->pcie_width = 0xff;
|
||||
break;
|
||||
default:
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
return perf;
|
||||
}
|
||||
|
@ -202,7 +202,7 @@ nvbios_perf_fan_parse(struct nvkm_bios *bios,
|
|||
struct nvbios_perf_fan *fan)
|
||||
{
|
||||
u8 ver, hdr, cnt, len, snr, ssz;
|
||||
u16 perf = nvbios_perf_table(bios, &ver, &hdr, &cnt, &len, &snr, &ssz);
|
||||
u32 perf = nvbios_perf_table(bios, &ver, &hdr, &cnt, &len, &snr, &ssz);
|
||||
if (!perf)
|
||||
return -ENODEV;
|
||||
|
||||
|
|
|
@ -25,17 +25,17 @@
|
|||
#include <subdev/bios/bit.h>
|
||||
#include <subdev/bios/therm.h>
|
||||
|
||||
static u16
|
||||
static u32
|
||||
therm_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *len, u8 *cnt)
|
||||
{
|
||||
struct bit_entry bit_P;
|
||||
u16 therm = 0;
|
||||
u32 therm = 0;
|
||||
|
||||
if (!bit_entry(bios, 'P', &bit_P)) {
|
||||
if (bit_P.version == 1)
|
||||
therm = nvbios_rd16(bios, bit_P.offset + 12);
|
||||
therm = nvbios_rd32(bios, bit_P.offset + 12);
|
||||
else if (bit_P.version == 2)
|
||||
therm = nvbios_rd16(bios, bit_P.offset + 16);
|
||||
therm = nvbios_rd32(bios, bit_P.offset + 16);
|
||||
else
|
||||
nvkm_error(&bios->subdev,
|
||||
"unknown offset for thermal in BIT P %d\n",
|
||||
|
@ -44,7 +44,7 @@ therm_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *len, u8 *cnt)
|
|||
|
||||
/* exit now if we haven't found the thermal table */
|
||||
if (!therm)
|
||||
return 0x0000;
|
||||
return 0;
|
||||
|
||||
*ver = nvbios_rd08(bios, therm + 0);
|
||||
*hdr = nvbios_rd08(bios, therm + 1);
|
||||
|
@ -53,14 +53,14 @@ therm_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *len, u8 *cnt)
|
|||
return therm + nvbios_rd08(bios, therm + 1);
|
||||
}
|
||||
|
||||
static u16
|
||||
static u32
|
||||
nvbios_therm_entry(struct nvkm_bios *bios, int idx, u8 *ver, u8 *len)
|
||||
{
|
||||
u8 hdr, cnt;
|
||||
u16 therm = therm_table(bios, ver, &hdr, len, &cnt);
|
||||
u32 therm = therm_table(bios, ver, &hdr, len, &cnt);
|
||||
if (therm && idx < cnt)
|
||||
return therm + idx * *len;
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -70,7 +70,7 @@ nvbios_therm_sensor_parse(struct nvkm_bios *bios,
|
|||
{
|
||||
s8 thrs_section, sensor_section, offset;
|
||||
u8 ver, len, i;
|
||||
u16 entry;
|
||||
u32 entry;
|
||||
|
||||
/* we only support the core domain for now */
|
||||
if (domain != NVBIOS_THERM_DOMAIN_CORE)
|
||||
|
@ -154,7 +154,7 @@ nvbios_therm_fan_parse(struct nvkm_bios *bios, struct nvbios_therm_fan *fan)
|
|||
{
|
||||
struct nvbios_therm_trip_point *cur_trip = NULL;
|
||||
u8 ver, len, i;
|
||||
u16 entry;
|
||||
u32 entry;
|
||||
|
||||
uint8_t duty_lut[] = { 0, 0, 25, 0, 40, 0, 50, 0,
|
||||
75, 0, 85, 0, 100, 0, 100, 0 };
|
||||
|
|
|
@ -25,19 +25,19 @@
|
|||
#include <subdev/bios/bit.h>
|
||||
#include <subdev/bios/timing.h>
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_timingTe(struct nvkm_bios *bios,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len, u8 *snr, u8 *ssz)
|
||||
{
|
||||
struct bit_entry bit_P;
|
||||
u16 timing = 0x0000;
|
||||
u32 timing = 0;
|
||||
|
||||
if (!bit_entry(bios, 'P', &bit_P)) {
|
||||
if (bit_P.version == 1)
|
||||
timing = nvbios_rd16(bios, bit_P.offset + 4);
|
||||
timing = nvbios_rd32(bios, bit_P.offset + 4);
|
||||
else
|
||||
if (bit_P.version == 2)
|
||||
timing = nvbios_rd16(bios, bit_P.offset + 8);
|
||||
timing = nvbios_rd32(bios, bit_P.offset + 8);
|
||||
|
||||
if (timing) {
|
||||
*ver = nvbios_rd08(bios, timing + 0);
|
||||
|
@ -62,15 +62,15 @@ nvbios_timingTe(struct nvkm_bios *bios,
|
|||
}
|
||||
}
|
||||
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_timingEe(struct nvkm_bios *bios, int idx,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
|
||||
{
|
||||
u8 snr, ssz;
|
||||
u16 timing = nvbios_timingTe(bios, ver, hdr, cnt, len, &snr, &ssz);
|
||||
u32 timing = nvbios_timingTe(bios, ver, hdr, cnt, len, &snr, &ssz);
|
||||
if (timing && idx < *cnt) {
|
||||
timing += *hdr + idx * (*len + (snr * ssz));
|
||||
*hdr = *len;
|
||||
|
@ -78,14 +78,14 @@ nvbios_timingEe(struct nvkm_bios *bios, int idx,
|
|||
*len = ssz;
|
||||
return timing;
|
||||
}
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_timingEp(struct nvkm_bios *bios, int idx,
|
||||
u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_ramcfg *p)
|
||||
{
|
||||
u16 data = nvbios_timingEe(bios, idx, ver, hdr, cnt, len), temp;
|
||||
u32 data = nvbios_timingEe(bios, idx, ver, hdr, cnt, len), temp;
|
||||
p->timing_ver = *ver;
|
||||
p->timing_hdr = *hdr;
|
||||
switch (!!data * *ver) {
|
||||
|
|
|
@ -25,15 +25,15 @@
|
|||
#include <subdev/bios/bit.h>
|
||||
#include <subdev/bios/vmap.h>
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_vmap_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
|
||||
{
|
||||
struct bit_entry bit_P;
|
||||
u16 vmap = 0x0000;
|
||||
u32 vmap = 0;
|
||||
|
||||
if (!bit_entry(bios, 'P', &bit_P)) {
|
||||
if (bit_P.version == 2) {
|
||||
vmap = nvbios_rd16(bios, bit_P.offset + 0x20);
|
||||
vmap = nvbios_rd32(bios, bit_P.offset + 0x20);
|
||||
if (vmap) {
|
||||
*ver = nvbios_rd08(bios, vmap + 0);
|
||||
switch (*ver) {
|
||||
|
@ -50,14 +50,14 @@ nvbios_vmap_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
|
|||
}
|
||||
}
|
||||
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_vmap_parse(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len,
|
||||
struct nvbios_vmap *info)
|
||||
{
|
||||
u16 vmap = nvbios_vmap_table(bios, ver, hdr, cnt, len);
|
||||
u32 vmap = nvbios_vmap_table(bios, ver, hdr, cnt, len);
|
||||
memset(info, 0x00, sizeof(*info));
|
||||
switch (!!vmap * *ver) {
|
||||
case 0x10:
|
||||
|
@ -77,23 +77,23 @@ nvbios_vmap_parse(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len,
|
|||
return vmap;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_vmap_entry(struct nvkm_bios *bios, int idx, u8 *ver, u8 *len)
|
||||
{
|
||||
u8 hdr, cnt;
|
||||
u16 vmap = nvbios_vmap_table(bios, ver, &hdr, &cnt, len);
|
||||
u32 vmap = nvbios_vmap_table(bios, ver, &hdr, &cnt, len);
|
||||
if (vmap && idx < cnt) {
|
||||
vmap = vmap + hdr + (idx * *len);
|
||||
return vmap;
|
||||
}
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_vmap_entry_parse(struct nvkm_bios *bios, int idx, u8 *ver, u8 *len,
|
||||
struct nvbios_vmap_entry *info)
|
||||
{
|
||||
u16 vmap = nvbios_vmap_entry(bios, idx, ver, len);
|
||||
u32 vmap = nvbios_vmap_entry(bios, idx, ver, len);
|
||||
memset(info, 0x00, sizeof(*info));
|
||||
switch (!!vmap * *ver) {
|
||||
case 0x10:
|
||||
|
|
|
@ -25,18 +25,18 @@
|
|||
#include <subdev/bios/bit.h>
|
||||
#include <subdev/bios/volt.h>
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_volt_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
|
||||
{
|
||||
struct bit_entry bit_P;
|
||||
u16 volt = 0x0000;
|
||||
u32 volt = 0;
|
||||
|
||||
if (!bit_entry(bios, 'P', &bit_P)) {
|
||||
if (bit_P.version == 2)
|
||||
volt = nvbios_rd16(bios, bit_P.offset + 0x0c);
|
||||
volt = nvbios_rd32(bios, bit_P.offset + 0x0c);
|
||||
else
|
||||
if (bit_P.version == 1)
|
||||
volt = nvbios_rd16(bios, bit_P.offset + 0x10);
|
||||
volt = nvbios_rd32(bios, bit_P.offset + 0x10);
|
||||
|
||||
if (volt) {
|
||||
*ver = nvbios_rd08(bios, volt + 0);
|
||||
|
@ -62,14 +62,14 @@ nvbios_volt_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
|
|||
}
|
||||
}
|
||||
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_volt_parse(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len,
|
||||
struct nvbios_volt *info)
|
||||
{
|
||||
u16 volt = nvbios_volt_table(bios, ver, hdr, cnt, len);
|
||||
u32 volt = nvbios_volt_table(bios, ver, hdr, cnt, len);
|
||||
memset(info, 0x00, sizeof(*info));
|
||||
switch (!!volt * *ver) {
|
||||
case 0x12:
|
||||
|
@ -119,23 +119,23 @@ nvbios_volt_parse(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len,
|
|||
return volt;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_volt_entry(struct nvkm_bios *bios, int idx, u8 *ver, u8 *len)
|
||||
{
|
||||
u8 hdr, cnt;
|
||||
u16 volt = nvbios_volt_table(bios, ver, &hdr, &cnt, len);
|
||||
u32 volt = nvbios_volt_table(bios, ver, &hdr, &cnt, len);
|
||||
if (volt && idx < cnt) {
|
||||
volt = volt + hdr + (idx * *len);
|
||||
return volt;
|
||||
}
|
||||
return 0x0000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16
|
||||
u32
|
||||
nvbios_volt_entry_parse(struct nvkm_bios *bios, int idx, u8 *ver, u8 *len,
|
||||
struct nvbios_volt_entry *info)
|
||||
{
|
||||
u16 volt = nvbios_volt_entry(bios, idx, ver, len);
|
||||
u32 volt = nvbios_volt_entry(bios, idx, ver, len);
|
||||
memset(info, 0x00, sizeof(*info));
|
||||
switch (!!volt * *ver) {
|
||||
case 0x12:
|
||||
|
|
|
@ -44,13 +44,13 @@ nvkm_clk_adjust(struct nvkm_clk *clk, bool adjust,
|
|||
struct nvkm_bios *bios = clk->subdev.device->bios;
|
||||
struct nvbios_boostE boostE;
|
||||
u8 ver, hdr, cnt, len;
|
||||
u16 data;
|
||||
u32 data;
|
||||
|
||||
data = nvbios_boostEm(bios, pstate, &ver, &hdr, &cnt, &len, &boostE);
|
||||
if (data) {
|
||||
struct nvbios_boostS boostS;
|
||||
u8 idx = 0, sver, shdr;
|
||||
u16 subd;
|
||||
u32 subd;
|
||||
|
||||
input = max(boostE.min, input);
|
||||
input = min(boostE.max, input);
|
||||
|
@ -229,7 +229,7 @@ nvkm_cstate_new(struct nvkm_clk *clk, int idx, struct nvkm_pstate *pstate)
|
|||
struct nvkm_cstate *cstate = NULL;
|
||||
struct nvbios_cstepX cstepX;
|
||||
u8 ver, hdr;
|
||||
u16 data;
|
||||
u32 data;
|
||||
|
||||
data = nvbios_cstepXp(bios, idx, &ver, &hdr, &cstepX);
|
||||
if (!data)
|
||||
|
@ -408,7 +408,7 @@ nvkm_pstate_new(struct nvkm_clk *clk, int idx)
|
|||
struct nvbios_cstepE cstepE;
|
||||
struct nvbios_perfE perfE;
|
||||
u8 ver, hdr, cnt, len;
|
||||
u16 data;
|
||||
u32 data;
|
||||
|
||||
data = nvbios_perfEp(bios, idx, &ver, &hdr, &cnt, &len, &perfE);
|
||||
if (!data)
|
||||
|
|
|
@ -130,6 +130,7 @@ gm200_devinit_post(struct nvkm_devinit *base, bool post)
|
|||
|
||||
/* upload first chunk of init data */
|
||||
if (post) {
|
||||
// devinit tables
|
||||
u32 pmu = pmu_args(init, args + 0x08, 0x08);
|
||||
u32 img = nvbios_rd16(bios, bit_I.offset + 0x14);
|
||||
u32 len = nvbios_rd16(bios, bit_I.offset + 0x16);
|
||||
|
@ -138,6 +139,7 @@ gm200_devinit_post(struct nvkm_devinit *base, bool post)
|
|||
|
||||
/* upload second chunk of init data */
|
||||
if (post) {
|
||||
// devinit boot scripts
|
||||
u32 pmu = pmu_args(init, args + 0x08, 0x10);
|
||||
u32 img = nvbios_rd16(bios, bit_I.offset + 0x18);
|
||||
u32 len = nvbios_rd16(bios, bit_I.offset + 0x1a);
|
||||
|
|
|
@ -92,13 +92,13 @@ gp100_ram_new(struct nvkm_fb *fb, struct nvkm_ram **pram)
|
|||
enum nvkm_ram_type type = nvkm_fb_bios_memtype(device->bios);
|
||||
const u32 rsvd_head = ( 256 * 1024); /* vga memory */
|
||||
const u32 rsvd_tail = (1024 * 1024); /* vbios etc */
|
||||
u32 fbpa_num = nvkm_rd32(device, 0x022438), fbpa;
|
||||
u32 fbpa_num = nvkm_rd32(device, 0x02243c), fbpa;
|
||||
u32 fbio_opt = nvkm_rd32(device, 0x021c14);
|
||||
u64 part, size = 0, comm = ~0ULL;
|
||||
bool mixed = false;
|
||||
int ret;
|
||||
|
||||
nvkm_debug(subdev, "022438: %08x\n", fbpa_num);
|
||||
nvkm_debug(subdev, "02243c: %08x\n", fbpa_num);
|
||||
nvkm_debug(subdev, "021c14: %08x\n", fbio_opt);
|
||||
for (fbpa = 0; fbpa < fbpa_num; fbpa++) {
|
||||
if (!(fbio_opt & (1 << fbpa))) {
|
||||
|
|
|
@ -190,8 +190,8 @@ mxm_dcb_sanitise(struct nvkm_mxm *mxm)
|
|||
struct nvkm_bios *bios = subdev->device->bios;
|
||||
u8 ver, hdr, cnt, len;
|
||||
u16 dcb = dcb_table(bios, &ver, &hdr, &cnt, &len);
|
||||
if (dcb == 0x0000 || ver != 0x40) {
|
||||
nvkm_debug(subdev, "unsupported DCB version\n");
|
||||
if (dcb == 0x0000 || (ver != 0x40 && ver != 0x41)) {
|
||||
nvkm_warn(subdev, "unsupported DCB version\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ nvkm_volt_map_min(struct nvkm_volt *volt, u8 id)
|
|||
struct nvkm_bios *bios = volt->subdev.device->bios;
|
||||
struct nvbios_vmap_entry info;
|
||||
u8 ver, len;
|
||||
u16 vmap;
|
||||
u32 vmap;
|
||||
|
||||
vmap = nvbios_vmap_entry_parse(bios, id, &ver, &len, &info);
|
||||
if (vmap) {
|
||||
|
@ -106,7 +106,7 @@ nvkm_volt_map(struct nvkm_volt *volt, u8 id, u8 temp)
|
|||
struct nvkm_bios *bios = volt->subdev.device->bios;
|
||||
struct nvbios_vmap_entry info;
|
||||
u8 ver, len;
|
||||
u16 vmap;
|
||||
u32 vmap;
|
||||
|
||||
vmap = nvbios_vmap_entry_parse(bios, id, &ver, &len, &info);
|
||||
if (vmap) {
|
||||
|
@ -189,7 +189,7 @@ nvkm_volt_parse_bios(struct nvkm_bios *bios, struct nvkm_volt *volt)
|
|||
struct nvbios_volt_entry ivid;
|
||||
struct nvbios_volt info;
|
||||
u8 ver, hdr, cnt, len;
|
||||
u16 data;
|
||||
u32 data;
|
||||
int i;
|
||||
|
||||
data = nvbios_volt_parse(bios, &ver, &hdr, &cnt, &len, &info);
|
||||
|
|
Loading…
Reference in New Issue