0001
0002
0003
0004
0005
0006
0007
0008 #include "psb_drv.h"
0009 #include "gma_device.h"
0010
0011 void gma_get_core_freq(struct drm_device *dev)
0012 {
0013 uint32_t clock;
0014 struct pci_dev *pdev = to_pci_dev(dev->dev);
0015 struct pci_dev *pci_root =
0016 pci_get_domain_bus_and_slot(pci_domain_nr(pdev->bus),
0017 0, 0);
0018 struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
0019
0020
0021
0022
0023 pci_write_config_dword(pci_root, 0xD0, 0xD0050300);
0024 pci_read_config_dword(pci_root, 0xD4, &clock);
0025 pci_dev_put(pci_root);
0026
0027 switch (clock & 0x07) {
0028 case 0:
0029 dev_priv->core_freq = 100;
0030 break;
0031 case 1:
0032 dev_priv->core_freq = 133;
0033 break;
0034 case 2:
0035 dev_priv->core_freq = 150;
0036 break;
0037 case 3:
0038 dev_priv->core_freq = 178;
0039 break;
0040 case 4:
0041 dev_priv->core_freq = 200;
0042 break;
0043 case 5:
0044 case 6:
0045 case 7:
0046 dev_priv->core_freq = 266;
0047 break;
0048 default:
0049 dev_priv->core_freq = 0;
0050 }
0051 }