diff options
author | Patrik Jakobsson <patrik.r.jakobsson@gmail.com> | 2014-03-11 17:53:43 -0400 |
---|---|---|
committer | Patrik Jakobsson <patrik.r.jakobsson@gmail.com> | 2014-03-17 15:13:24 -0400 |
commit | f35257a3fe267c4280bb2f69453ca1dd3bf48956 (patch) | |
tree | 326af3b01c342a21435aac90cbf60b4bd0e6cdaf | |
parent | 778e26dee5e6b3be4611b1f99f8359cb64b27ce9 (diff) |
drm/gma500: Unify _get_core_freq for cdv and psb
Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
-rw-r--r-- | drivers/gpu/drm/gma500/Makefile | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/gma500/cdv_device.c | 40 | ||||
-rw-r--r-- | drivers/gpu/drm/gma500/gma_device.c | 56 | ||||
-rw-r--r-- | drivers/gpu/drm/gma500/gma_device.h | 21 | ||||
-rw-r--r-- | drivers/gpu/drm/gma500/psb_device.c | 42 |
5 files changed, 82 insertions, 78 deletions
diff --git a/drivers/gpu/drm/gma500/Makefile b/drivers/gpu/drm/gma500/Makefile index 69c0d7f4d794..b15315576376 100644 --- a/drivers/gpu/drm/gma500/Makefile +++ b/drivers/gpu/drm/gma500/Makefile | |||
@@ -17,6 +17,7 @@ gma500_gfx-y += \ | |||
17 | power.o \ | 17 | power.o \ |
18 | psb_drv.o \ | 18 | psb_drv.o \ |
19 | gma_display.o \ | 19 | gma_display.o \ |
20 | gma_device.o \ | ||
20 | psb_intel_display.o \ | 21 | psb_intel_display.o \ |
21 | psb_intel_lvds.o \ | 22 | psb_intel_lvds.o \ |
22 | psb_intel_modes.o \ | 23 | psb_intel_modes.o \ |
diff --git a/drivers/gpu/drm/gma500/cdv_device.c b/drivers/gpu/drm/gma500/cdv_device.c index 5a9a6a3063a8..3531f90e53d0 100644 --- a/drivers/gpu/drm/gma500/cdv_device.c +++ b/drivers/gpu/drm/gma500/cdv_device.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include "psb_intel_reg.h" | 26 | #include "psb_intel_reg.h" |
27 | #include "intel_bios.h" | 27 | #include "intel_bios.h" |
28 | #include "cdv_device.h" | 28 | #include "cdv_device.h" |
29 | #include "gma_device.h" | ||
29 | 30 | ||
30 | #define VGA_SR_INDEX 0x3c4 | 31 | #define VGA_SR_INDEX 0x3c4 |
31 | #define VGA_SR_DATA 0x3c5 | 32 | #define VGA_SR_DATA 0x3c5 |
@@ -426,43 +427,6 @@ static int cdv_power_up(struct drm_device *dev) | |||
426 | return 0; | 427 | return 0; |
427 | } | 428 | } |
428 | 429 | ||
429 | /* FIXME ? - shared with Poulsbo */ | ||
430 | static void cdv_get_core_freq(struct drm_device *dev) | ||
431 | { | ||
432 | uint32_t clock; | ||
433 | struct pci_dev *pci_root = pci_get_bus_and_slot(0, 0); | ||
434 | struct drm_psb_private *dev_priv = dev->dev_private; | ||
435 | |||
436 | pci_write_config_dword(pci_root, 0xD0, 0xD0050300); | ||
437 | pci_read_config_dword(pci_root, 0xD4, &clock); | ||
438 | pci_dev_put(pci_root); | ||
439 | |||
440 | switch (clock & 0x07) { | ||
441 | case 0: | ||
442 | dev_priv->core_freq = 100; | ||
443 | break; | ||
444 | case 1: | ||
445 | dev_priv->core_freq = 133; | ||
446 | break; | ||
447 | case 2: | ||
448 | dev_priv->core_freq = 150; | ||
449 | break; | ||
450 | case 3: | ||
451 | dev_priv->core_freq = 178; | ||
452 | break; | ||
453 | case 4: | ||
454 | dev_priv->core_freq = 200; | ||
455 | break; | ||
456 | case 5: | ||
457 | case 6: | ||
458 | case 7: | ||
459 | dev_priv->core_freq = 266; | ||
460 | break; | ||
461 | default: | ||
462 | dev_priv->core_freq = 0; | ||
463 | } | ||
464 | } | ||
465 | |||
466 | static void cdv_hotplug_work_func(struct work_struct *work) | 430 | static void cdv_hotplug_work_func(struct work_struct *work) |
467 | { | 431 | { |
468 | struct drm_psb_private *dev_priv = container_of(work, struct drm_psb_private, | 432 | struct drm_psb_private *dev_priv = container_of(work, struct drm_psb_private, |
@@ -618,7 +582,7 @@ static int cdv_chip_setup(struct drm_device *dev) | |||
618 | if (pci_enable_msi(dev->pdev)) | 582 | if (pci_enable_msi(dev->pdev)) |
619 | dev_warn(dev->dev, "Enabling MSI failed!\n"); | 583 | dev_warn(dev->dev, "Enabling MSI failed!\n"); |
620 | dev_priv->regmap = cdv_regmap; | 584 | dev_priv->regmap = cdv_regmap; |
621 | cdv_get_core_freq(dev); | 585 | gma_get_core_freq(dev); |
622 | psb_intel_opregion_init(dev); | 586 | psb_intel_opregion_init(dev); |
623 | psb_intel_init_bios(dev); | 587 | psb_intel_init_bios(dev); |
624 | cdv_hotplug_enable(dev, false); | 588 | cdv_hotplug_enable(dev, false); |
diff --git a/drivers/gpu/drm/gma500/gma_device.c b/drivers/gpu/drm/gma500/gma_device.c new file mode 100644 index 000000000000..4a295f9ba067 --- /dev/null +++ b/drivers/gpu/drm/gma500/gma_device.c | |||
@@ -0,0 +1,56 @@ | |||
1 | /************************************************************************** | ||
2 | * Copyright (c) 2011, Intel Corporation. | ||
3 | * All Rights Reserved. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms and conditions of the GNU General Public License, | ||
7 | * version 2, as published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
12 | * more details. | ||
13 | * | ||
14 | **************************************************************************/ | ||
15 | |||
16 | #include <drm/drmP.h> | ||
17 | #include "psb_drv.h" | ||
18 | |||
19 | void gma_get_core_freq(struct drm_device *dev) | ||
20 | { | ||
21 | uint32_t clock; | ||
22 | struct pci_dev *pci_root = pci_get_bus_and_slot(0, 0); | ||
23 | struct drm_psb_private *dev_priv = dev->dev_private; | ||
24 | |||
25 | /*pci_write_config_dword(pci_root, 0xD4, 0x00C32004);*/ | ||
26 | /*pci_write_config_dword(pci_root, 0xD0, 0xE0033000);*/ | ||
27 | |||
28 | pci_write_config_dword(pci_root, 0xD0, 0xD0050300); | ||
29 | pci_read_config_dword(pci_root, 0xD4, &clock); | ||
30 | pci_dev_put(pci_root); | ||
31 | |||
32 | switch (clock & 0x07) { | ||
33 | case 0: | ||
34 | dev_priv->core_freq = 100; | ||
35 | break; | ||
36 | case 1: | ||
37 | dev_priv->core_freq = 133; | ||
38 | break; | ||
39 | case 2: | ||
40 | dev_priv->core_freq = 150; | ||
41 | break; | ||
42 | case 3: | ||
43 | dev_priv->core_freq = 178; | ||
44 | break; | ||
45 | case 4: | ||
46 | dev_priv->core_freq = 200; | ||
47 | break; | ||
48 | case 5: | ||
49 | case 6: | ||
50 | case 7: | ||
51 | dev_priv->core_freq = 266; | ||
52 | break; | ||
53 | default: | ||
54 | dev_priv->core_freq = 0; | ||
55 | } | ||
56 | } | ||
diff --git a/drivers/gpu/drm/gma500/gma_device.h b/drivers/gpu/drm/gma500/gma_device.h new file mode 100644 index 000000000000..e1dbb007b820 --- /dev/null +++ b/drivers/gpu/drm/gma500/gma_device.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /************************************************************************** | ||
2 | * Copyright (c) 2011, Intel Corporation. | ||
3 | * All Rights Reserved. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms and conditions of the GNU General Public License, | ||
7 | * version 2, as published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
12 | * more details. | ||
13 | * | ||
14 | **************************************************************************/ | ||
15 | |||
16 | #ifndef _GMA_DEVICE_H | ||
17 | #define _GMA_DEVICE_H | ||
18 | |||
19 | extern void gma_get_core_freq(struct drm_device *dev); | ||
20 | |||
21 | #endif | ||
diff --git a/drivers/gpu/drm/gma500/psb_device.c b/drivers/gpu/drm/gma500/psb_device.c index 23fb33f1471b..07df7d4eea72 100644 --- a/drivers/gpu/drm/gma500/psb_device.c +++ b/drivers/gpu/drm/gma500/psb_device.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include "psb_intel_reg.h" | 26 | #include "psb_intel_reg.h" |
27 | #include "intel_bios.h" | 27 | #include "intel_bios.h" |
28 | #include "psb_device.h" | 28 | #include "psb_device.h" |
29 | #include "gma_device.h" | ||
29 | 30 | ||
30 | static int psb_output_init(struct drm_device *dev) | 31 | static int psb_output_init(struct drm_device *dev) |
31 | { | 32 | { |
@@ -257,45 +258,6 @@ static int psb_power_up(struct drm_device *dev) | |||
257 | return 0; | 258 | return 0; |
258 | } | 259 | } |
259 | 260 | ||
260 | static void psb_get_core_freq(struct drm_device *dev) | ||
261 | { | ||
262 | uint32_t clock; | ||
263 | struct pci_dev *pci_root = pci_get_bus_and_slot(0, 0); | ||
264 | struct drm_psb_private *dev_priv = dev->dev_private; | ||
265 | |||
266 | /*pci_write_config_dword(pci_root, 0xD4, 0x00C32004);*/ | ||
267 | /*pci_write_config_dword(pci_root, 0xD0, 0xE0033000);*/ | ||
268 | |||
269 | pci_write_config_dword(pci_root, 0xD0, 0xD0050300); | ||
270 | pci_read_config_dword(pci_root, 0xD4, &clock); | ||
271 | pci_dev_put(pci_root); | ||
272 | |||
273 | switch (clock & 0x07) { | ||
274 | case 0: | ||
275 | dev_priv->core_freq = 100; | ||
276 | break; | ||
277 | case 1: | ||
278 | dev_priv->core_freq = 133; | ||
279 | break; | ||
280 | case 2: | ||
281 | dev_priv->core_freq = 150; | ||
282 | break; | ||
283 | case 3: | ||
284 | dev_priv->core_freq = 178; | ||
285 | break; | ||
286 | case 4: | ||
287 | dev_priv->core_freq = 200; | ||
288 | break; | ||
289 | case 5: | ||
290 | case 6: | ||
291 | case 7: | ||
292 | dev_priv->core_freq = 266; | ||
293 | break; | ||
294 | default: | ||
295 | dev_priv->core_freq = 0; | ||
296 | } | ||
297 | } | ||
298 | |||
299 | /* Poulsbo */ | 261 | /* Poulsbo */ |
300 | static const struct psb_offset psb_regmap[2] = { | 262 | static const struct psb_offset psb_regmap[2] = { |
301 | { | 263 | { |
@@ -352,7 +314,7 @@ static int psb_chip_setup(struct drm_device *dev) | |||
352 | { | 314 | { |
353 | struct drm_psb_private *dev_priv = dev->dev_private; | 315 | struct drm_psb_private *dev_priv = dev->dev_private; |
354 | dev_priv->regmap = psb_regmap; | 316 | dev_priv->regmap = psb_regmap; |
355 | psb_get_core_freq(dev); | 317 | gma_get_core_freq(dev); |
356 | gma_intel_setup_gmbus(dev); | 318 | gma_intel_setup_gmbus(dev); |
357 | psb_intel_opregion_init(dev); | 319 | psb_intel_opregion_init(dev); |
358 | psb_intel_init_bios(dev); | 320 | psb_intel_init_bios(dev); |