~ubuntu-branches/ubuntu/raring/linux-ti-omap4/raring-proposed

« back to all changes in this revision

Viewing changes to ubuntu/i915/i915_sysfs.c

  • Committer: Package Import Robot
  • Author(s): Paolo Pisati, Paolo Pisati, Ubuntu: 3.5.0-20.31
  • Date: 2012-12-06 14:14:29 UTC
  • Revision ID: package-import@ubuntu.com-20121206141429-3f6mmypbjdmnmm2t
Tags: 3.5.0-216.23
* Release Tracking Bug
  - LP: #1087216

[ Paolo Pisati ]

* rebased on Ubuntu-3.5.0-20.31

[ Ubuntu: 3.5.0-20.31 ]

* Release Tracking Bug
  - LP: #1086759
* SAUCE: i915_hsw: Include #define I915_PARAM_HAS_WAIT_TIMEOUT
  - LP: #1085245
* SAUCE: i915_hsw: Include #define DRM_I915_GEM_CONTEXT_[CREATE,DESTROY]
  - LP: #1085245
* SAUCE: i915_hsw: drm/i915: add register read IOCTL
  - LP: #1085245
* SAUCE: i915_hsw: Include #define i915_execbuffer2_[set,get]_context_id
  - LP: #1085245
* SAUCE: i915_hsw: Include #define I915_GEM_PARAM_HAS_SEMAPHORES
  - LP: #1085245
* SAUCE: i915_hsw: Include #define I915_PARAM_HAS_SECURE_BATCHES
  - LP: #1085245
* SAUCE: i915_hsw: drm/i915: call intel_enable_gtt
  - LP: #1085245
* SAUCE: i915_hsw: drm: add helper to sort panels to the head of the
  connector list
  - LP: #1085245
* SAUCE: i915_hsw: drm: extract dp link bw helpers
  - LP: #1085245
* SAUCE: i915_hsw: drm: extract drm_dp_max_lane_count helper
  - LP: #1085245
* SAUCE: i915_hsw: drm: dp helper: extract drm_dp_channel_eq_ok
  - LP: #1085245
* SAUCE: i915_hsw: drm: extract helpers to compute new training values
  from sink request
  - LP: #1085245
* SAUCE: i915_hsw: drm: dp helper: extract drm_dp_clock_recovery_ok
  - LP: #1085245
* SAUCE: i915_hsw: Include #define I915_PARAM_HAS_PRIME_VMAP_FLUSH
  - LP: #1085245
* SAUCE: i915_hsw: Provide an ubuntu/i915 driver for Haswell graphics
  - LP: #1085245
* SAUCE: i915_hsw: Revert "drm: Make the .mode_fixup() operations mode
  argument a const pointer" for ubuntu/i915 driver
  - LP: #1085245
* SAUCE: i915_hsw: Rename ubuntu/i915 driver i915_hsw
  - LP: #1085245
* SAUCE: i915_hsw: Only support Haswell with ubuntu/i915 driver
  - LP: #1085245
* SAUCE: i915_hsw: Include #define DRM_I915_GEM_WAIT
  - LP: #1085245
* SAUCE: i915_hsw: drm: extract dp link train delay functions from radeon
  - LP: #1085245
* SAUCE: i915_hsw: drm/dp: Update DPCD defines
  - LP: #1085245
* SAUCE: i915_hsw: Update intel_ips.h file location
  - LP: #1085245
* SAUCE: i915_hsw: Provide updated drm_mm.h and drm_mm.c for ubuntu/i915
  - LP: #1085245
* SAUCE: i915_hsw: drm/i915: Replace the array of pages with a
  scatterlist
  - LP: #1085245
* SAUCE: i915_hsw: drm/i915: Replace the array of pages with a
  scatterlist
  - LP: #1085245
* SAUCE: i915_hsw: drm/i915: Stop using AGP layer for GEN6+
  - LP: #1085245
* SAUCE: i915_hsw: Add i915_hsw_gpu_*() calls for ubuntu/i915
  - LP: #1085245
* i915_hsw: [Config] Enable CONFIG_DRM_I915_HSW=m
  - LP: #1085245
* SAUCE: drm/i915: fix hsw_fdi_link_train "retry" code
  - LP: #1085245
* SAUCE: drm/i915: reject modes the LPT FDI receiver can't handle
  - LP: #1085245
* SAUCE: drm/i915: add support for mPHY destination on intel_sbi_{read,
  write}
  - LP: #1085245
* SAUCE: drm/i915: add lpt_init_pch_refclk
  - LP: #1085245
* SAUCE: drm/i915: set the LPT FDI RX polarity reversal bit when needed
  - LP: #1085245
* Revert "SAUCE: SECCOMP: audit: always report seccomp violations"
  - LP: #1079469
* Revert "cgroup: Drop task_lock(parent) on cgroup_fork()"
  - LP: #1084539
* Revert "cgroup: Remove task_lock() from cgroup_post_fork()"
  - LP: #1084539
* Revert "x86/mm: Fix the size calculation of mapping tables"
  - LP: #1084539
* Revert "SUNRPC: Ensure we close the socket on EPIPE errors too..."
  - LP: #1084539
* Revert "ath9k_hw: Updated AR9003 tx gain table for 5GHz"
  - LP: #1084539
* Revert "sched: Add missing call to calc_load_exit_idle()"
  - LP: #1084539
* net: fix secpath kmemleak
  - LP: #1065434
* seccomp: forcing auditing of kill condition
  - LP: #1079469
* e1000e: add device IDs for i218
  - LP: #1081796
* bonding: Bonding driver does not consider the gso_max_size/gso_max_segs
  setting of slave devices.
  - LP: #1078184
* mm/hotplug: correctly add new zone to all other nodes' zone lists
  - LP: #1079860
  - CVE-2012-5517
* xen: enable platform-pci only in a Xen guest
  - LP: #1081054
* udf: fix retun value on error path in udf_load_logicalvol
  - LP: #1084539
* usb: gadget: at91_udc: fix dt support
  - LP: #1084539
* netfilter: nf_nat_sip: fix incorrect handling of EBUSY for RTCP
  expectation
  - LP: #1084539
* netfilter: nf_nat_sip: fix via header translation with multiple
  parameters
  - LP: #1084539
* netfilter: nf_ct_expect: fix possible access to uninitialized timer
  - LP: #1084539
* netfilter: xt_limit: have r->cost != 0 case work
  - LP: #1084539
* netfilter: nf_conntrack: fix racy timer handling with reliable events
  - LP: #1084539
* netfilter: nfnetlink_log: fix NLA_PUT macro removal bug
  - LP: #1084539
* MIPS: ath79: Fix CPU/DDR frequency calculation for SRIF PLLs
  - LP: #1084539
* jbd: Fix assertion failure in commit code due to lacking transaction
  credits
  - LP: #1084539
* nfsd4: fix nfs4 stateid leak
  - LP: #1084539
* NFSD: pass null terminated buf to kstrtouint()
  - LP: #1084539
* mfd: 88pm860x: Move _IO resources out of ioport_ioresource
  - LP: #1084539
* target: support zero allocation length in INQUIRY
  - LP: #1084539
* target: fix truncation of mode data, support zero allocation length
  - LP: #1084539
* target: fix return code in target_core_init_configfs error path
  - LP: #1084539
* powerpc/eeh: Lock module while handling EEH event
  - LP: #1084539
* SUNRPC: Ensure that the TCP socket is closed when in CLOSE_WAIT
  - LP: #1084539
* ext4: remove erroneous ext4_superblock_csum_set() in update_backups()
  - LP: #1084539
* block: remove the duplicated setting for congestion_threshold
  - LP: #1084539
* block: lift the initial queue bypass mode on blk_register_queue()
  instead of blk_init_allocated_queue()
  - LP: #1084539
* block: fix request_queue->flags initialization
  - LP: #1084539
* viafb: don't touch clock state on OLPC XO-1.5
  - LP: #1084539
* qla2xxx: Fix endianness of task management response code
  - LP: #1084539
* iscsi-target: Correctly set 0xffffffff field within ISCSI_OP_REJECT PDU
  - LP: #1084539
* drm/i915: use adjusted_mode instead of mode for checking the 6bpc force
  flag
  - LP: #1084539
* kbuild: Do not package /boot and /lib in make tar-pkg
  - LP: #1084539
* module: taint kernel when lve module is loaded
  - LP: #1084539
* mtd: nand: allow NAND_NO_SUBPAGE_WRITE to be set from driver
  - LP: #1084539
* nfsd4: don't pin clientids to pseudoflavors
  - LP: #1084539
* lockd: use rpc client's cl_nodename for id encoding
  - LP: #1084539
* pnfsblock: fix partial page buffer wirte
  - LP: #1084539
* pnfsblock: fix non-aligned DIO read
  - LP: #1084539
* pnfsblock: fix non-aligned DIO write
  - LP: #1084539
* target/file: Re-enable optional fd_buffered_io=1 operation
  - LP: #1084539
* iscsi-target: Add explicit set of cache_dynamic_acls=1 for TPG
  demo-mode
  - LP: #1084539
* iscsit: remove incorrect unlock in iscsit_build_sendtargets_resp
  - LP: #1084539
* iscsi-target: Bump defaults for nopin_timeout + nopin_response_timeout
  values
  - LP: #1084539
* drivers/dma/dmaengine.c: lower the priority of 'failed to get' dma
  channel message
  - LP: #1084539
* ath9k: use ieee80211_free_txskb
  - LP: #1084539
* ALSA: hda - Fix hang caused by race during suspend.
  - LP: #1084539
* ACPI: EC: Make the GPE storm threshold a module parameter
  - LP: #1084539
* ACPI: EC: Add a quirk for CLEVO M720T/M730T laptop
  - LP: #1084539
* mmc: sdhci-s3c: fix the wrong number of max bus clocks
  - LP: #1084539
* mac80211: use ieee80211_free_txskb to fix possible skb leaks
  - LP: #1084539
* ARM: OMAP: counter: add locking to read_persistent_clock
  - LP: #1084539
* ARM: vfp: fix saving d16-d31 vfp registers on v6+ kernels
  - LP: #1084539
* scsi_debug: Fix off-by-one bug when unmapping region
  - LP: #1084539
* storvsc: Account for in-transit packets in the RESET path
  - LP: #1084539
* firewire: cdev: fix user memory corruption (i386 userland on amd64
  kernel)
  - LP: #1084539
* timers: Fix endless looping between cascade() and internal_add_timer()
  - LP: #1084539
* timekeeping: Cast raw_interval to u64 to avoid shift overflow
  - LP: #1084539
* video/udlfb: fix line counting in fb_write
  - LP: #1084539
* tmpfs,ceph,gfs2,isofs,reiserfs,xfs: fix fh_len checking
  - LP: #1084539
* ALSA: hda - Add missing hda_gen_spec to struct via_spec
  - LP: #1084539
* ALSA: hda - Fix memory leaks at error path in patch_cirrus.c
  - LP: #1084539
* autofs4 - fix reset pending flag on mount fail
  - LP: #1084539
* pktgen: fix crash when generating IPv6 packets
  - LP: #1084539
* md/raid10: use correct limit variable
  - LP: #1084539
* mips,kgdb: fix recursive page fault with CONFIG_KPROBES
  - LP: #1084539
* kdb,vt_console: Fix missed data due to pager overruns
  - LP: #1084539
* xen/bootup: allow read_tscp call for Xen PV guests.
  - LP: #1084539
* xen/bootup: allow {read|write}_cr8 pvops call.
  - LP: #1084539
* libceph: eliminate connection state "DEAD"
  - LP: #1084539
* libceph: kill bad_proto ceph connection op
  - LP: #1084539
* libceph: rename socket callbacks
  - LP: #1084539
* libceph: rename kvec_reset and kvec_add functions
  - LP: #1084539
* libceph: embed ceph messenger structure in ceph_client
  - LP: #1084539
* libceph: start separating connection flags from state
  - LP: #1084539
* libceph: start tracking connection socket state
  - LP: #1084539
* libceph: provide osd number when creating osd
  - LP: #1084539
* libceph: set CLOSED state bit in con_init
  - LP: #1084539
* libceph: embed ceph connection structure in mon_client
  - LP: #1084539
* libceph: drop connection refcounting for mon_client
  - LP: #1084539
* libceph: init monitor connection when opening
  - LP: #1084539
* libceph: fully initialize connection in con_init()
  - LP: #1084539
* libceph: tweak ceph_alloc_msg()
  - LP: #1084539
* libceph: have messages point to their connection
  - LP: #1084539
* libceph: have messages take a connection reference
  - LP: #1084539
* libceph: make ceph_con_revoke() a msg operation
  - LP: #1084539
* libceph: make ceph_con_revoke_message() a msg op
  - LP: #1084539
* libceph: fix overflow in __decode_pool_names()
  - LP: #1084539
* libceph: fix overflow in osdmap_decode()
  - LP: #1084539
* libceph: fix overflow in osdmap_apply_incremental()
  - LP: #1084539
* libceph: transition socket state prior to actual connect
  - LP: #1084539
* libceph: fix NULL dereference in reset_connection()
  - LP: #1084539
* libceph: use con get/put methods
  - LP: #1084539
* libceph: drop ceph_con_get/put helpers and nref member
  - LP: #1084539
* libceph: encapsulate out message data setup
  - LP: #1084539
* libceph: encapsulate advancing msg page
  - LP: #1084539
* libceph: don't mark footer complete before it is
  - LP: #1084539
* libceph: move init_bio_*() functions up
  - LP: #1084539
* libceph: move init of bio_iter
  - LP: #1084539
* libceph: don't use bio_iter as a flag
  - LP: #1084539
* libceph: SOCK_CLOSED is a flag, not a state
  - LP: #1084539
* libceph: don't change socket state on sock event
  - LP: #1084539
* libceph: just set SOCK_CLOSED when state changes
  - LP: #1084539
* libceph: don't touch con state in con_close_socket()
  - LP: #1084539
* libceph: clear CONNECTING in ceph_con_close()
  - LP: #1084539
* libceph: clear NEGOTIATING when done
  - LP: #1084539
* libceph: define and use an explicit CONNECTED state
  - LP: #1084539
* libceph: separate banner and connect writes
  - LP: #1084539
* libceph: distinguish two phases of connect sequence
  - LP: #1084539
* libceph: small changes to messenger.c
  - LP: #1084539
* libceph: add some fine ASCII art
  - LP: #1084539
* libceph: set peer name on con_open, not init
  - LP: #1084539
* libceph: initialize mon_client con only once
  - LP: #1084539
* libceph: allow sock transition from CONNECTING to CLOSED
  - LP: #1084539
* libceph: initialize msgpool message types
  - LP: #1084539
* libceph: prevent the race of incoming work during teardown
  - LP: #1084539
* libceph: report socket read/write error message
  - LP: #1084539
* libceph: fix mutex coverage for ceph_con_close
  - LP: #1084539
* libceph: resubmit linger ops when pg mapping changes
  - LP: #1084539
* libceph: (re)initialize bio_iter on start of message receive
  - LP: #1084539
* libceph: protect ceph_con_open() with mutex
  - LP: #1084539
* libceph: reset connection retry on successfully negotiation
  - LP: #1084539
* libceph: fix fault locking; close socket on lossy fault
  - LP: #1084539
* libceph: move msgr clear_standby under con mutex protection
  - LP: #1084539
* libceph: move ceph_con_send() closed check under the con mutex
  - LP: #1084539
* libceph: drop gratuitous socket close calls in con_work
  - LP: #1084539
* libceph: close socket directly from ceph_con_close()
  - LP: #1084539
* libceph: drop unnecessary CLOSED check in socket state change callback
  - LP: #1084539
* libceph: replace connection state bits with states
  - LP: #1084539
* libceph: clean up con flags
  - LP: #1084539
* libceph: clear all flags on con_close
  - LP: #1084539
* libceph: fix handling of immediate socket connect failure
  - LP: #1084539
* libceph: revoke mon_client messages on session restart
  - LP: #1084539
* libceph: verify state after retaking con lock after dispatch
  - LP: #1084539
* libceph: avoid dropping con mutex before fault
  - LP: #1084539
* libceph: change ceph_con_in_msg_alloc convention to be less weird
  - LP: #1084539
* libceph: recheck con state after allocating incoming message
  - LP: #1084539
* libceph: fix crypto key null deref, memory leak
  - LP: #1084539
* libceph: delay debugfs initialization until we learn global_id
  - LP: #1084539
* libceph: avoid truncation due to racing banners
  - LP: #1084539
* libceph: only kunmap kmapped pages
  - LP: #1084539
* rbd: reset BACKOFF if unable to re-queue
  - LP: #1084539
* libceph: avoid NULL kref_put when osd reset races with alloc_msg
  - LP: #1084539
* ceph: fix dentry reference leak in encode_fh()
  - LP: #1084539
* ceph: Fix oops when handling mdsmap that decreases max_mds
  - LP: #1084539
* libceph: check for invalid mapping
  - LP: #1084539
* ceph: avoid 32-bit page index overflow
  - LP: #1084539
* ASoC: wm2200: Use rev A register patches on rev B
  - LP: #1084539
* ASoC: wm2200: Fix non-inverted OUT2 mute control
  - LP: #1084539
* drm/i915: remove useless BUG_ON which caused a regression in 3.5.
  - LP: #1084539
* USB: Enable LPM after a failed probe.
  - LP: #1084539
* usb: Don't enable LPM if the exit latency is zero.
  - LP: #1084539
* usb: Send Set SEL before enabling parent U1/U2 timeout.
  - LP: #1084539
* ASoC: fsi: don't reschedule DMA from an atomic context
  - LP: #1084539
* drm/i915: Set guardband clipping workaround bit in the right register.
  - LP: #1084539
* pcmcia: sharpsl: don't discard sharpsl_pcmcia_ops
  - LP: #1084539
* hwmon: (coretemp) Add support for Atom CE4110/4150/4170
  - LP: #1084539
* ALSA: hda - Fix registration race of VGA switcheroo
  - LP: #1084539
* usb: dwc3: gadget: fix 'endpoint always busy' bug
  - LP: #1084539
* usb: musb: am35xx: drop spurious unplugging a device
  - LP: #1084539
* drm/radeon: Don't destroy I2C Bus Rec in radeon_ext_tmds_enc_destroy().
  - LP: #1084539
* ALSA: hda - Always check array bounds in alc_get_line_out_pfx
  - LP: #1084539
* NLM: nlm_lookup_file() may return NLMv4-specific error codes
  - LP: #1084539
* x86: Exclude E820_RESERVED regions and memory holes above 4 GB from
  direct mapping.
  - LP: #1084539
* SUNRPC: Prevent kernel stack corruption on long values of flush
  - LP: #1084539
* USB: cdc-acm: fix pipe type of write endpoint
  - LP: #1084539
* usb: acm: fix the computation of the number of data bits
  - LP: #1084539
* usb: host: xhci: New system added for Compliance Mode Patch on
  SN65LVPE502CP
  - LP: #1084539
* USB: option: blacklist net interface on ZTE devices
  - LP: #1084539
* USB: option: add more ZTE devices
  - LP: #1084539
* ext4: race-condition protection for
  ext4_convert_unwritten_extents_endio
  - LP: #1084539
* ext4: fix metadata checksum calculation for the superblock
  - LP: #1084539
* nohz: Fix idle ticks in cpu summary line of /proc/stat
  - LP: #1084539
* ring-buffer: Check for uninitialized cpu buffer before resizing
  - LP: #1084539
* Bluetooth: SMP: Fix setting unknown auth_req bits
  - LP: #1084539
* oprofile, x86: Fix wrapping bug in op_x86_get_ctrl()
  - LP: #1084539
* cfg80211/mac80211: avoid state mishmash on deauth
  - LP: #1084539
* mac80211: check if key has TKIP type before updating IV
  - LP: #1084539
* mac80211: use ieee80211_free_txskb in a few more places
  - LP: #1084539
* bcma: fix unregistration of cores
  - LP: #1084539
* net/wireless: ipw2200: Fix panic occurring in
  ipw_handle_promiscuous_tx()
  - LP: #1084539
* iwlwifi: fix 6000 series channel switch command
  - LP: #1084539
* cgroup: notify_on_release may not be triggered in some cases
  - LP: #1084539
* dt: Document: correct tegra20/30 pinctrl slew-rate name
  - LP: #1084539
* pinctrl: tegra: set low power mode bank width to 2
  - LP: #1084539
* pinctrl: tegra: correct bank for pingroup and drv pingroup
  - LP: #1084539
* s390: fix linker script for 31 bit builds
  - LP: #1084539
* pinctrl: remove mutex lock in groups show
  - LP: #1084539
* xen/x86: don't corrupt %eip when returning from a signal handler
  - LP: #1084539
* ALSA: hda - Fix silent headphone output from Toshiba P200
  - LP: #1084539
* ext4: Checksum the block bitmap properly with bigalloc enabled
  - LP: #1084539
* ARM: 7559/1: smp: switch away from the idmap before updating
  init_mm.mm_count
  - LP: #1084539
* usb hub: send clear_tt_buffer_complete events when canceling TT clear
  work
  - LP: #1084539
* staging: comedi: amplc_pc236: fix invalid register access during detach
  - LP: #1084539
* Staging: android: binder: Fix memory leak on thread/process exit
  - LP: #1084539
* Staging: android: binder: Allow using highmem for binder buffers
  - LP: #1084539
* ext4: Avoid underflow in ext4_trim_fs()
  - LP: #1084539
* cpufreq / powernow-k8: Remove usage of smp_processor_id() in
  preemptible code
  - LP: #1084539
* extcon: Unregister compat class at module unload to fix oops
  - LP: #1084539
* extcon: unregister compat link on cleanup
  - LP: #1084539
* pinctrl: fix missing unlock on error in pinctrl_groups_show()
  - LP: #1084539
* arch/tile: avoid generating .eh_frame information in modules
  - LP: #1084539
* drm/radeon: add some new SI PCI ids
  - LP: #1084539
* drm/radeon: add error output if VM CS fails on cayman
  - LP: #1084539
* xhci: endianness xhci_calculate_intel_u2_timeout
  - LP: #1084539
* xhci: fix integer overflow
  - LP: #1084539
* dmaengine: imx-dma: fix missing unlock on error in imxdma_xfer_desc()
  - LP: #1084539
* x86-64: Fix page table accounting
  - LP: #1084539
* dmaengine: sirf: fix a typo in dma_prep_interleaved
  - LP: #1084539
* dmaengine: sirf: fix a typo in moving running dma_desc to active queue
  - LP: #1084539
* amd64_edac:__amd64_set_scrub_rate(): avoid overindexing scrubrates[]
  - LP: #1084539
* SUNRPC: Clear the connect flag when socket state is TCP_CLOSE_WAIT
  - LP: #1084539
* SUNRPC: Prevent races in xs_abort_connection()
  - LP: #1084539
* SUNRPC: Get rid of the xs_error_report socket callback
  - LP: #1084539
* iommu/tegra: smmu: Fix deadly typo
  - LP: #1084539
* ARM: at91/tc: fix typo in the DT document
  - LP: #1084539
* ARM: at91: at91sam9g10: fix SOC type detection
  - LP: #1084539
* ARM: at91/i2c: change id to let i2c-gpio work
  - LP: #1084539
* b43: Fix oops on unload when firmware not found
  - LP: #1084539
* USB: serial: Fix memory leak in sierra_release()
  - LP: #1084539
* x86, mm: Trim memory in memblock to be page aligned
  - LP: #1084539
* x86, mm: Use memblock memory loop instead of e820_RAM
  - LP: #1084539
* usb-storage: add unusual_devs entry for Casio EX-N1 digital camera
  - LP: #1084539
* Drivers: hv: Cleanup error handling in vmbus_open()
  - LP: #1084539
* sysfs: sysfs_pathname/sysfs_add_one: Use strlcat() instead of strcat()
  - LP: #1084539
* vhost: fix mergeable bufs on BE hosts
  - LP: #1084539
* USB: metro-usb: fix io after disconnect
  - LP: #1084539
* USB: whiteheat: fix memory leak in error path
  - LP: #1084539
* USB: quatech2: fix memory leak in error path
  - LP: #1084539
* USB: quatech2: fix io after disconnect
  - LP: #1084539
* USB: opticon: fix DMA from stack
  - LP: #1084539
* USB: opticon: fix memory leak in error path
  - LP: #1084539
* USB: mct_u232: fix broken close
  - LP: #1084539
* USB: sierra: fix memory leak in attach error path
  - LP: #1084539
* USB: sierra: fix memory leak in probe error path
  - LP: #1084539
* USB: mos7840: fix urb leak at release
  - LP: #1084539
* USB: mos7840: fix port-device leak in error path
  - LP: #1084539
* USB: mos7840: remove NULL-urb submission
  - LP: #1084539
* USB: mos7840: remove invalid disconnect handling
  - LP: #1084539
* ehci: fix Lucid nohandoff pci quirk to be more generic with BIOS
  versions
  - LP: #1084539
* ehci: Add yet-another Lucid nohandoff pci quirk
  - LP: #1084539
* xhci: Fix potential NULL ptr deref in command cancellation.
  - LP: #1084539
* freezer: exec should clear PF_NOFREEZE along with PF_KTHREAD
  - LP: #1084539
* mm: fix XFS oops due to dirty pages without buffers on s390
  - LP: #1084539
* genalloc: stop crashing the system when destroying a pool
  - LP: #1084539
* drivers/rtc/rtc-imxdi.c: add missing spin lock initialization
  - LP: #1084539
* gen_init_cpio: avoid stack overflow when expanding
  - LP: #1084539
* fs/compat_ioctl.c: VIDEO_SET_SPU_PALETTE missing error check
  - LP: #1084539
* qmi_wwan/cdc_ether: move Novatel 551 and E362 to qmi_wwan
  - LP: #1084539
* efi: Defer freeing boot services memory until after ACPI init
  - LP: #1084539
* x86: efi: Turn off efi_enabled after setup on mixed fw/kernel
  - LP: #1082059, #1084539
* target: Re-add explict zeroing of INQUIRY bounce buffer memory
  - LP: #1084539
* ARM: 7566/1: vfp: fix save and restore when running on pre-VFPv3 and
  CONFIG_VFPv3 set
  - LP: #1084539
* libceph: drop declaration of ceph_con_get()
  - LP: #1084539
* x86, mm: Find_early_table_space based on ranges that are actually being
  mapped
  - LP: #1084539
* x86, mm: Undo incorrect revert in arch/x86/mm/init.c
  - LP: #1084539
* Linux 3.5.7.1
  - LP: #1084539
* ALSA: hda - Cirrus: Correctly clear line_out_pins when moving to
  speaker
  - LP: #1076840
* Bluetooth: ath3k: Add support for VAIO VPCEH [0489:e027]
  - LP: #898826
* i915_hsw: drm/i915: Reserve ioctl numbers for set/get_caching
  - LP: #1085245
* i915_hsw: drm: Export drm_probe_ddc()
  - LP: #1085245
* i915_hsw: drm: remove the raw_edid field from struct drm_display_info
  - LP: #1085245
* i915_hsw: drm/i915: fix hsw uncached pte
  - LP: #1085245
* i915_hsw: drm/fb-helper: delay hotplug handling when partially bound
  - LP: #1085245
* i915_hsw: drm/fb helper: don't call drm_crtc_helper_set_config
  - LP: #1085245
* i915_hsw: drm/fb-helper: don't clobber output routing in setup_crtcs
  - LP: #1085245
* i915_hsw: drm/fb helper: don't call drm_helper_connector_dpms directly
  - LP: #1085245
* i915_hsw: drm/edid: Fix potential memory leak in edid_load()
  - LP: #1085245

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright © 2012 Intel Corporation
 
3
 *
 
4
 * Permission is hereby granted, free of charge, to any person obtaining a
 
5
 * copy of this software and associated documentation files (the "Software"),
 
6
 * to deal in the Software without restriction, including without limitation
 
7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 
8
 * and/or sell copies of the Software, and to permit persons to whom the
 
9
 * Software is furnished to do so, subject to the following conditions:
 
10
 *
 
11
 * The above copyright notice and this permission notice (including the next
 
12
 * paragraph) shall be included in all copies or substantial portions of the
 
13
 * Software.
 
14
 *
 
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 
18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 
20
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 
21
 * IN THE SOFTWARE.
 
22
 *
 
23
 * Authors:
 
24
 *    Ben Widawsky <ben@bwidawsk.net>
 
25
 *
 
26
 */
 
27
 
 
28
#include <linux/device.h>
 
29
#include <linux/module.h>
 
30
#include <linux/stat.h>
 
31
#include <linux/sysfs.h>
 
32
#include "intel_drv.h"
 
33
#include "i915_drv.h"
 
34
 
 
35
#ifdef CONFIG_PM
 
36
static u32 calc_residency(struct drm_device *dev, const u32 reg)
 
37
{
 
38
        struct drm_i915_private *dev_priv = dev->dev_private;
 
39
        u64 raw_time; /* 32b value may overflow during fixed point math */
 
40
 
 
41
        if (!intel_enable_rc6(dev))
 
42
                return 0;
 
43
 
 
44
        raw_time = I915_READ(reg) * 128ULL;
 
45
        return DIV_ROUND_UP_ULL(raw_time, 100000);
 
46
}
 
47
 
 
48
static ssize_t
 
49
show_rc6_mask(struct device *kdev, struct device_attribute *attr, char *buf)
 
50
{
 
51
        struct drm_minor *dminor = container_of(kdev, struct drm_minor, kdev);
 
52
        return snprintf(buf, PAGE_SIZE, "%x", intel_enable_rc6(dminor->dev));
 
53
}
 
54
 
 
55
static ssize_t
 
56
show_rc6_ms(struct device *kdev, struct device_attribute *attr, char *buf)
 
57
{
 
58
        struct drm_minor *dminor = container_of(kdev, struct drm_minor, kdev);
 
59
        u32 rc6_residency = calc_residency(dminor->dev, GEN6_GT_GFX_RC6);
 
60
        return snprintf(buf, PAGE_SIZE, "%u", rc6_residency);
 
61
}
 
62
 
 
63
static ssize_t
 
64
show_rc6p_ms(struct device *kdev, struct device_attribute *attr, char *buf)
 
65
{
 
66
        struct drm_minor *dminor = container_of(kdev, struct drm_minor, kdev);
 
67
        u32 rc6p_residency = calc_residency(dminor->dev, GEN6_GT_GFX_RC6p);
 
68
        return snprintf(buf, PAGE_SIZE, "%u", rc6p_residency);
 
69
}
 
70
 
 
71
static ssize_t
 
72
show_rc6pp_ms(struct device *kdev, struct device_attribute *attr, char *buf)
 
73
{
 
74
        struct drm_minor *dminor = container_of(kdev, struct drm_minor, kdev);
 
75
        u32 rc6pp_residency = calc_residency(dminor->dev, GEN6_GT_GFX_RC6pp);
 
76
        return snprintf(buf, PAGE_SIZE, "%u", rc6pp_residency);
 
77
}
 
78
 
 
79
static DEVICE_ATTR(rc6_enable, S_IRUGO, show_rc6_mask, NULL);
 
80
static DEVICE_ATTR(rc6_residency_ms, S_IRUGO, show_rc6_ms, NULL);
 
81
static DEVICE_ATTR(rc6p_residency_ms, S_IRUGO, show_rc6p_ms, NULL);
 
82
static DEVICE_ATTR(rc6pp_residency_ms, S_IRUGO, show_rc6pp_ms, NULL);
 
83
 
 
84
static struct attribute *rc6_attrs[] = {
 
85
        &dev_attr_rc6_enable.attr,
 
86
        &dev_attr_rc6_residency_ms.attr,
 
87
        &dev_attr_rc6p_residency_ms.attr,
 
88
        &dev_attr_rc6pp_residency_ms.attr,
 
89
        NULL
 
90
};
 
91
 
 
92
static struct attribute_group rc6_attr_group = {
 
93
        .name = power_group_name,
 
94
        .attrs =  rc6_attrs
 
95
};
 
96
#endif
 
97
 
 
98
static int l3_access_valid(struct drm_device *dev, loff_t offset)
 
99
{
 
100
        if (!IS_IVYBRIDGE(dev))
 
101
                return -EPERM;
 
102
 
 
103
        if (offset % 4 != 0)
 
104
                return -EINVAL;
 
105
 
 
106
        if (offset >= GEN7_L3LOG_SIZE)
 
107
                return -ENXIO;
 
108
 
 
109
        return 0;
 
110
}
 
111
 
 
112
static ssize_t
 
113
i915_l3_read(struct file *filp, struct kobject *kobj,
 
114
             struct bin_attribute *attr, char *buf,
 
115
             loff_t offset, size_t count)
 
116
{
 
117
        struct device *dev = container_of(kobj, struct device, kobj);
 
118
        struct drm_minor *dminor = container_of(dev, struct drm_minor, kdev);
 
119
        struct drm_device *drm_dev = dminor->dev;
 
120
        struct drm_i915_private *dev_priv = drm_dev->dev_private;
 
121
        uint32_t misccpctl;
 
122
        int i, ret;
 
123
 
 
124
        ret = l3_access_valid(drm_dev, offset);
 
125
        if (ret)
 
126
                return ret;
 
127
 
 
128
        ret = i915_mutex_lock_interruptible(drm_dev);
 
129
        if (ret)
 
130
                return ret;
 
131
 
 
132
        misccpctl = I915_READ(GEN7_MISCCPCTL);
 
133
        I915_WRITE(GEN7_MISCCPCTL, misccpctl & ~GEN7_DOP_CLOCK_GATE_ENABLE);
 
134
 
 
135
        for (i = offset; count >= 4 && i < GEN7_L3LOG_SIZE; i += 4, count -= 4)
 
136
                *((uint32_t *)(&buf[i])) = I915_READ(GEN7_L3LOG_BASE + i);
 
137
 
 
138
        I915_WRITE(GEN7_MISCCPCTL, misccpctl);
 
139
 
 
140
        mutex_unlock(&drm_dev->struct_mutex);
 
141
 
 
142
        return i - offset;
 
143
}
 
144
 
 
145
static ssize_t
 
146
i915_l3_write(struct file *filp, struct kobject *kobj,
 
147
              struct bin_attribute *attr, char *buf,
 
148
              loff_t offset, size_t count)
 
149
{
 
150
        struct device *dev = container_of(kobj, struct device, kobj);
 
151
        struct drm_minor *dminor = container_of(dev, struct drm_minor, kdev);
 
152
        struct drm_device *drm_dev = dminor->dev;
 
153
        struct drm_i915_private *dev_priv = drm_dev->dev_private;
 
154
        u32 *temp = NULL; /* Just here to make handling failures easy */
 
155
        int ret;
 
156
 
 
157
        ret = l3_access_valid(drm_dev, offset);
 
158
        if (ret)
 
159
                return ret;
 
160
 
 
161
        ret = i915_mutex_lock_interruptible(drm_dev);
 
162
        if (ret)
 
163
                return ret;
 
164
 
 
165
        if (!dev_priv->l3_parity.remap_info) {
 
166
                temp = kzalloc(GEN7_L3LOG_SIZE, GFP_KERNEL);
 
167
                if (!temp) {
 
168
                        mutex_unlock(&drm_dev->struct_mutex);
 
169
                        return -ENOMEM;
 
170
                }
 
171
        }
 
172
 
 
173
        ret = i915_gpu_idle(drm_dev);
 
174
        if (ret) {
 
175
                kfree(temp);
 
176
                mutex_unlock(&drm_dev->struct_mutex);
 
177
                return ret;
 
178
        }
 
179
 
 
180
        /* TODO: Ideally we really want a GPU reset here to make sure errors
 
181
         * aren't propagated. Since I cannot find a stable way to reset the GPU
 
182
         * at this point it is left as a TODO.
 
183
        */
 
184
        if (temp)
 
185
                dev_priv->l3_parity.remap_info = temp;
 
186
 
 
187
        memcpy(dev_priv->l3_parity.remap_info + (offset/4),
 
188
               buf + (offset/4),
 
189
               count);
 
190
 
 
191
        i915_gem_l3_remap(drm_dev);
 
192
 
 
193
        mutex_unlock(&drm_dev->struct_mutex);
 
194
 
 
195
        return count;
 
196
}
 
197
 
 
198
static struct bin_attribute dpf_attrs = {
 
199
        .attr = {.name = "l3_parity", .mode = (S_IRUSR | S_IWUSR)},
 
200
        .size = GEN7_L3LOG_SIZE,
 
201
        .read = i915_l3_read,
 
202
        .write = i915_l3_write,
 
203
        .mmap = NULL
 
204
};
 
205
 
 
206
static ssize_t gt_cur_freq_mhz_show(struct device *kdev,
 
207
                                    struct device_attribute *attr, char *buf)
 
208
{
 
209
        struct drm_minor *minor = container_of(kdev, struct drm_minor, kdev);
 
210
        struct drm_device *dev = minor->dev;
 
211
        struct drm_i915_private *dev_priv = dev->dev_private;
 
212
        int ret;
 
213
 
 
214
        mutex_lock(&dev_priv->rps.hw_lock);
 
215
        ret = dev_priv->rps.cur_delay * GT_FREQUENCY_MULTIPLIER;
 
216
        mutex_unlock(&dev_priv->rps.hw_lock);
 
217
 
 
218
        return snprintf(buf, PAGE_SIZE, "%d", ret);
 
219
}
 
220
 
 
221
static ssize_t gt_max_freq_mhz_show(struct device *kdev, struct device_attribute *attr, char *buf)
 
222
{
 
223
        struct drm_minor *minor = container_of(kdev, struct drm_minor, kdev);
 
224
        struct drm_device *dev = minor->dev;
 
225
        struct drm_i915_private *dev_priv = dev->dev_private;
 
226
        int ret;
 
227
 
 
228
        mutex_lock(&dev_priv->rps.hw_lock);
 
229
        ret = dev_priv->rps.max_delay * GT_FREQUENCY_MULTIPLIER;
 
230
        mutex_unlock(&dev_priv->rps.hw_lock);
 
231
 
 
232
        return snprintf(buf, PAGE_SIZE, "%d", ret);
 
233
}
 
234
 
 
235
static ssize_t gt_max_freq_mhz_store(struct device *kdev,
 
236
                                     struct device_attribute *attr,
 
237
                                     const char *buf, size_t count)
 
238
{
 
239
        struct drm_minor *minor = container_of(kdev, struct drm_minor, kdev);
 
240
        struct drm_device *dev = minor->dev;
 
241
        struct drm_i915_private *dev_priv = dev->dev_private;
 
242
        u32 val, rp_state_cap, hw_max, hw_min;
 
243
        ssize_t ret;
 
244
 
 
245
        ret = kstrtou32(buf, 0, &val);
 
246
        if (ret)
 
247
                return ret;
 
248
 
 
249
        val /= GT_FREQUENCY_MULTIPLIER;
 
250
 
 
251
        mutex_lock(&dev_priv->rps.hw_lock);
 
252
 
 
253
        rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
 
254
        hw_max = (rp_state_cap & 0xff);
 
255
        hw_min = ((rp_state_cap & 0xff0000) >> 16);
 
256
 
 
257
        if (val < hw_min || val > hw_max || val < dev_priv->rps.min_delay) {
 
258
                mutex_unlock(&dev_priv->rps.hw_lock);
 
259
                return -EINVAL;
 
260
        }
 
261
 
 
262
        if (dev_priv->rps.cur_delay > val)
 
263
                gen6_set_rps(dev_priv->dev, val);
 
264
 
 
265
        dev_priv->rps.max_delay = val;
 
266
 
 
267
        mutex_unlock(&dev_priv->rps.hw_lock);
 
268
 
 
269
        return count;
 
270
}
 
271
 
 
272
static ssize_t gt_min_freq_mhz_show(struct device *kdev, struct device_attribute *attr, char *buf)
 
273
{
 
274
        struct drm_minor *minor = container_of(kdev, struct drm_minor, kdev);
 
275
        struct drm_device *dev = minor->dev;
 
276
        struct drm_i915_private *dev_priv = dev->dev_private;
 
277
        int ret;
 
278
 
 
279
        mutex_lock(&dev_priv->rps.hw_lock);
 
280
        ret = dev_priv->rps.min_delay * GT_FREQUENCY_MULTIPLIER;
 
281
        mutex_unlock(&dev_priv->rps.hw_lock);
 
282
 
 
283
        return snprintf(buf, PAGE_SIZE, "%d", ret);
 
284
}
 
285
 
 
286
static ssize_t gt_min_freq_mhz_store(struct device *kdev,
 
287
                                     struct device_attribute *attr,
 
288
                                     const char *buf, size_t count)
 
289
{
 
290
        struct drm_minor *minor = container_of(kdev, struct drm_minor, kdev);
 
291
        struct drm_device *dev = minor->dev;
 
292
        struct drm_i915_private *dev_priv = dev->dev_private;
 
293
        u32 val, rp_state_cap, hw_max, hw_min;
 
294
        ssize_t ret;
 
295
 
 
296
        ret = kstrtou32(buf, 0, &val);
 
297
        if (ret)
 
298
                return ret;
 
299
 
 
300
        val /= GT_FREQUENCY_MULTIPLIER;
 
301
 
 
302
        mutex_lock(&dev_priv->rps.hw_lock);
 
303
 
 
304
        rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
 
305
        hw_max = (rp_state_cap & 0xff);
 
306
        hw_min = ((rp_state_cap & 0xff0000) >> 16);
 
307
 
 
308
        if (val < hw_min || val > hw_max || val > dev_priv->rps.max_delay) {
 
309
                mutex_unlock(&dev_priv->rps.hw_lock);
 
310
                return -EINVAL;
 
311
        }
 
312
 
 
313
        if (dev_priv->rps.cur_delay < val)
 
314
                gen6_set_rps(dev_priv->dev, val);
 
315
 
 
316
        dev_priv->rps.min_delay = val;
 
317
 
 
318
        mutex_unlock(&dev_priv->rps.hw_lock);
 
319
 
 
320
        return count;
 
321
 
 
322
}
 
323
 
 
324
static DEVICE_ATTR(gt_cur_freq_mhz, S_IRUGO, gt_cur_freq_mhz_show, NULL);
 
325
static DEVICE_ATTR(gt_max_freq_mhz, S_IRUGO | S_IWUSR, gt_max_freq_mhz_show, gt_max_freq_mhz_store);
 
326
static DEVICE_ATTR(gt_min_freq_mhz, S_IRUGO | S_IWUSR, gt_min_freq_mhz_show, gt_min_freq_mhz_store);
 
327
 
 
328
 
 
329
static ssize_t gt_rp_mhz_show(struct device *kdev, struct device_attribute *attr, char *buf);
 
330
static DEVICE_ATTR(gt_RP0_freq_mhz, S_IRUGO, gt_rp_mhz_show, NULL);
 
331
static DEVICE_ATTR(gt_RP1_freq_mhz, S_IRUGO, gt_rp_mhz_show, NULL);
 
332
static DEVICE_ATTR(gt_RPn_freq_mhz, S_IRUGO, gt_rp_mhz_show, NULL);
 
333
 
 
334
/* For now we have a static number of RP states */
 
335
static ssize_t gt_rp_mhz_show(struct device *kdev, struct device_attribute *attr, char *buf)
 
336
{
 
337
        struct drm_minor *minor = container_of(kdev, struct drm_minor, kdev);
 
338
        struct drm_device *dev = minor->dev;
 
339
        struct drm_i915_private *dev_priv = dev->dev_private;
 
340
        u32 val, rp_state_cap;
 
341
        ssize_t ret;
 
342
 
 
343
        ret = mutex_lock_interruptible(&dev->struct_mutex);
 
344
        if (ret)
 
345
                return ret;
 
346
        rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
 
347
        mutex_unlock(&dev->struct_mutex);
 
348
 
 
349
        if (attr == &dev_attr_gt_RP0_freq_mhz) {
 
350
                val = ((rp_state_cap & 0x0000ff) >> 0) * GT_FREQUENCY_MULTIPLIER;
 
351
        } else if (attr == &dev_attr_gt_RP1_freq_mhz) {
 
352
                val = ((rp_state_cap & 0x00ff00) >> 8) * GT_FREQUENCY_MULTIPLIER;
 
353
        } else if (attr == &dev_attr_gt_RPn_freq_mhz) {
 
354
                val = ((rp_state_cap & 0xff0000) >> 16) * GT_FREQUENCY_MULTIPLIER;
 
355
        } else {
 
356
                BUG();
 
357
        }
 
358
        return snprintf(buf, PAGE_SIZE, "%d", val);
 
359
}
 
360
 
 
361
static const struct attribute *gen6_attrs[] = {
 
362
        &dev_attr_gt_cur_freq_mhz.attr,
 
363
        &dev_attr_gt_max_freq_mhz.attr,
 
364
        &dev_attr_gt_min_freq_mhz.attr,
 
365
        &dev_attr_gt_RP0_freq_mhz.attr,
 
366
        &dev_attr_gt_RP1_freq_mhz.attr,
 
367
        &dev_attr_gt_RPn_freq_mhz.attr,
 
368
        NULL,
 
369
};
 
370
 
 
371
void i915_setup_sysfs(struct drm_device *dev)
 
372
{
 
373
        int ret;
 
374
 
 
375
#ifdef CONFIG_PM
 
376
        if (INTEL_INFO(dev)->gen >= 6) {
 
377
                ret = sysfs_merge_group(&dev->primary->kdev.kobj,
 
378
                                        &rc6_attr_group);
 
379
                if (ret)
 
380
                        DRM_ERROR("RC6 residency sysfs setup failed\n");
 
381
        }
 
382
#endif
 
383
        if (HAS_L3_GPU_CACHE(dev)) {
 
384
                ret = device_create_bin_file(&dev->primary->kdev, &dpf_attrs);
 
385
                if (ret)
 
386
                        DRM_ERROR("l3 parity sysfs setup failed\n");
 
387
        }
 
388
 
 
389
        if (INTEL_INFO(dev)->gen >= 6) {
 
390
                ret = sysfs_create_files(&dev->primary->kdev.kobj, gen6_attrs);
 
391
                if (ret)
 
392
                        DRM_ERROR("gen6 sysfs setup failed\n");
 
393
        }
 
394
}
 
395
 
 
396
void i915_teardown_sysfs(struct drm_device *dev)
 
397
{
 
398
        sysfs_remove_files(&dev->primary->kdev.kobj, gen6_attrs);
 
399
        device_remove_bin_file(&dev->primary->kdev,  &dpf_attrs);
 
400
#ifdef CONFIG_PM
 
401
        sysfs_unmerge_group(&dev->primary->kdev.kobj, &rc6_attr_group);
 
402
#endif
 
403
}