mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-24 03:24:55 +08:00
drm/nouveau/subdev: add direct pointer to nvkm_device
Will be utilised in upcoming commits to remove the need for heuristics to lookup the device a subdev belongs to. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
0d5dd3f301
commit
d351b8569e
@ -130,17 +130,17 @@ static bool
|
||||
get_tv_detect_quirks(struct drm_device *dev, uint32_t *pin_mask)
|
||||
{
|
||||
struct nouveau_drm *drm = nouveau_drm(dev);
|
||||
struct nvif_device *device = &drm->device;
|
||||
struct nvkm_device *device = nvxx_device(&drm->device);
|
||||
|
||||
/* Zotac FX5200 */
|
||||
if (nv_device_match(nvxx_object(device), 0x0322, 0x19da, 0x1035) ||
|
||||
nv_device_match(nvxx_object(device), 0x0322, 0x19da, 0x2035)) {
|
||||
if (nv_device_match(device, 0x0322, 0x19da, 0x1035) ||
|
||||
nv_device_match(device, 0x0322, 0x19da, 0x2035)) {
|
||||
*pin_mask = 0xc;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* MSI nForce2 IGP */
|
||||
if (nv_device_match(nvxx_object(device), 0x01f0, 0x1462, 0x5710)) {
|
||||
if (nv_device_match(device, 0x01f0, 0x1462, 0x5710)) {
|
||||
*pin_mask = 0xc;
|
||||
return false;
|
||||
}
|
||||
|
@ -49,9 +49,8 @@ int nvkm_device_list(u64 *name, int size);
|
||||
struct nvkm_device *nv_device(void *obj);
|
||||
|
||||
static inline bool
|
||||
nv_device_match(struct nvkm_object *object, u16 dev, u16 ven, u16 sub)
|
||||
nv_device_match(struct nvkm_device *device, u16 dev, u16 ven, u16 sub)
|
||||
{
|
||||
struct nvkm_device *device = nv_device(object);
|
||||
return device->pdev->device == dev &&
|
||||
device->pdev->subsystem_vendor == ven &&
|
||||
device->pdev->subsystem_device == sub;
|
||||
|
@ -8,6 +8,9 @@
|
||||
|
||||
struct nvkm_subdev {
|
||||
struct nvkm_object object;
|
||||
|
||||
struct nvkm_device *device;
|
||||
|
||||
struct mutex mutex;
|
||||
const char *name;
|
||||
void __iomem *mmio;
|
||||
|
@ -114,6 +114,9 @@ nvkm_subdev_create_(struct nvkm_object *parent, struct nvkm_object *engine,
|
||||
struct nvkm_device *device = nv_device(parent);
|
||||
subdev->debug = nvkm_dbgopt(device->dbgopt, subname);
|
||||
subdev->mmio = nv_subdev(device)->mmio;
|
||||
subdev->device = device;
|
||||
} else {
|
||||
subdev->device = nv_device(subdev);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -44,6 +44,7 @@ static int
|
||||
nvkm_gpio_find(struct nvkm_gpio *gpio, int idx, u8 tag, u8 line,
|
||||
struct dcb_gpio_func *func)
|
||||
{
|
||||
struct nvkm_device *device = gpio->base.device;
|
||||
struct nvkm_bios *bios = nvkm_bios(gpio);
|
||||
u8 ver, len;
|
||||
u16 data;
|
||||
@ -56,7 +57,7 @@ nvkm_gpio_find(struct nvkm_gpio *gpio, int idx, u8 tag, u8 line,
|
||||
return 0;
|
||||
|
||||
/* Apple iMac G4 NV18 */
|
||||
if (nv_device_match(nv_object(gpio), 0x0189, 0x10de, 0x0010)) {
|
||||
if (nv_device_match(device, 0x0189, 0x10de, 0x0010)) {
|
||||
if (tag == DCB_GPIO_TVDAC0) {
|
||||
*func = (struct dcb_gpio_func) {
|
||||
.func = DCB_GPIO_TVDAC0,
|
||||
|
@ -54,7 +54,6 @@ static void
|
||||
gk104_pmu_pgob(struct nvkm_pmu *pmu, bool enable)
|
||||
{
|
||||
struct nvkm_device *device = nv_device(pmu);
|
||||
struct nvkm_object *dev = nv_object(device);
|
||||
|
||||
nv_mask(pmu, 0x000200, 0x00001000, 0x00000000);
|
||||
nv_rd32(pmu, 0x000200);
|
||||
@ -76,8 +75,8 @@ gk104_pmu_pgob(struct nvkm_pmu *pmu, bool enable)
|
||||
nv_mask(pmu, 0x000200, 0x00001000, 0x00001000);
|
||||
nv_rd32(pmu, 0x000200);
|
||||
|
||||
if (nv_device_match(dev, 0x11fc, 0x17aa, 0x2211) /* Lenovo W541 */
|
||||
|| nv_device_match(dev, 0x11fc, 0x17aa, 0x221e) /* Lenovo W541 */
|
||||
if (nv_device_match(device, 0x11fc, 0x17aa, 0x2211) /* Lenovo W541 */
|
||||
|| nv_device_match(device, 0x11fc, 0x17aa, 0x221e) /* Lenovo W541 */
|
||||
|| nvkm_boolopt(device->cfgopt, "War00C800_0", false)) {
|
||||
nv_info(pmu, "hw bug workaround enabled\n");
|
||||
switch (device->chipset) {
|
||||
|
Loading…
Reference in New Issue
Block a user