XXX: more detailed commit message --- lib/Makefile.am | 9 +- lib/intel_dpio.c | 94 --------- lib/intel_gpu_tools.h | 15 ++ lib/intel_iosf.c | 85 -------- lib/intel_reg.h | 221 +++++++++++++++++++-- lib/intel_sideband.c | 191 ++++++++++++++++++ tools/intel_dpio_read.c => lib/intel_sideband.h | 64 ++---- .../kernel-shim/drm-shim.h | 62 +++--- .../kernel-shim/i915_drv.h | 53 ++--- .../kernel-shim/intel_drv.h | 69 +++---- .../intel_dpio_read.c => lib/kernel-shim/kernel.h | 76 +++---- scripts/sync-from-kernel | 30 +++ tools/intel_dpio_read.c | 4 +- tools/intel_dpio_write.c | 4 +- tools/intel_nc_read.c | 6 +- tools/intel_nc_write.c | 10 +- tools/intel_punit_read.c | 6 +- tools/intel_punit_write.c | 10 +- 18 files changed, 592 insertions(+), 417 deletions(-) delete mode 100644 lib/intel_dpio.c delete mode 100644 lib/intel_iosf.c create mode 100644 lib/intel_sideband.c copy tools/intel_dpio_read.c => lib/intel_sideband.h (52%) copy tools/intel_dpio_write.c => lib/kernel-shim/drm-shim.h (55%) copy tools/intel_dpio_write.c => lib/kernel-shim/i915_drv.h (55%) copy tools/intel_dpio_write.c => lib/kernel-shim/intel_drv.h (55%) copy tools/intel_dpio_read.c => lib/kernel-shim/kernel.h (52%) create mode 100755 scripts/sync-from-kernel diff --git a/lib/Makefile.am b/lib/Makefile.am index 387141b..2cafe22 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1,10 +1,14 @@ noinst_LTLIBRARIES = libintel_tools.la -AM_CPPFLAGS = -I$(top_srcdir) +AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)/kernel-shim AM_CFLAGS = $(DRM_CFLAGS) $(CWARNFLAGS) libintel_tools_la_SOURCES = \ + kernel-shim/kernel.h \ + kernel-shim/i915_drv.h \ + kernel-shim/intel_drv.h \ + kernel-shim/drm-shim.h \ debug.h \ drmtest.c \ drmtest.h \ @@ -29,8 +33,7 @@ libintel_tools_la_SOURCES = \ rendercopy_gen7.c \ rendercopy.h \ intel_reg_map.c \ - intel_dpio.c \ - intel_iosf.c \ + intel_sideband.c \ $(NULL) LDADD = $(CAIRO_LIBS) diff --git a/lib/intel_dpio.c b/lib/intel_dpio.c deleted file mode 100644 index acfd201..0000000 --- a/lib/intel_dpio.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright ? 2008 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Vijay Purushothaman <vijay.a.purushothaman at intel.com> - * - */ -#include <unistd.h> -#include <stdlib.h> -#include <stdio.h> -#include <err.h> -#include "intel_gpu_tools.h" - -static uint32_t intel_display_reg_read(uint32_t reg) -{ - struct pci_device *dev = intel_get_pci_device(); - - if (IS_VALLEYVIEW(dev->device_id)) - reg += VLV_DISPLAY_BASE; - return (*(volatile uint32_t*)((volatile char*)mmio + reg)); -} - -static void intel_display_reg_write(uint32_t reg, uint32_t val) -{ - volatile uint32_t *ptr; - struct pci_device *dev = intel_get_pci_device(); - - if (IS_VALLEYVIEW(dev->device_id)) - reg += VLV_DISPLAY_BASE; - ptr = (volatile uint32_t*)((volatile char*)mmio + reg); - *ptr = val; -} - -/* - * In SoCs like Valleyview some of the PLL & Lane control registers - * can be accessed only through IO side band fabric called DPIO - */ -uint32_t -intel_dpio_reg_read(uint32_t reg) -{ - /* Check whether the side band fabric is ready to accept commands */ - do { - usleep(1); - } while (intel_display_reg_read(DPIO_PKT) & DPIO_BUSY); - - intel_display_reg_write(DPIO_REG, reg); - intel_display_reg_write(DPIO_PKT, DPIO_RID | - DPIO_OP_READ | DPIO_PORTID | DPIO_BYTE); - do { - usleep(1); - } while (intel_display_reg_read(DPIO_PKT) & DPIO_BUSY); - - return intel_display_reg_read(DPIO_DATA); -} - -/* - * In SoCs like Valleyview some of the PLL & Lane control registers - * can be accessed only through IO side band fabric called DPIO - */ -void -intel_dpio_reg_write(uint32_t reg, uint32_t val) -{ - /* Check whether the side band fabric is ready to accept commands */ - do { - usleep(1); - } while (intel_display_reg_read(DPIO_PKT) & DPIO_BUSY); - - intel_display_reg_write(DPIO_DATA, val); - intel_display_reg_write(DPIO_REG, reg); - intel_display_reg_write(DPIO_PKT, DPIO_RID | - DPIO_OP_WRITE | DPIO_PORTID | DPIO_BYTE); - do { - usleep(1); - } while (intel_display_reg_read(DPIO_PKT) & DPIO_BUSY); -} diff --git a/lib/intel_gpu_tools.h b/lib/intel_gpu_tools.h index faa948c..bd54171 100644 --- a/lib/intel_gpu_tools.h +++ b/lib/intel_gpu_tools.h @@ -112,4 +112,19 @@ void intel_check_pch(void); #define HAS_CPT (pch == PCH_CPT) #define HAS_LPT (pch == PCH_LPT) +/* + * Kernel Shim + */ + +/* Don't really care about locking atm */ +struct mutex +{ + int dummy; +}; + +struct drm_i915_private +{ + struct mutex dpio_lock; +}; + #endif /* INTEL_GPU_TOOLS_H */ diff --git a/lib/intel_iosf.c b/lib/intel_iosf.c deleted file mode 100644 index 0ab14df..0000000 --- a/lib/intel_iosf.c +++ /dev/null @@ -1,85 +0,0 @@ -#include <unistd.h> -#include <stdlib.h> -#include <stdio.h> -#include <err.h> -#include <errno.h> -#include "intel_gpu_tools.h" - -#define TIMEOUT_US 500000 - -static int vlv_punit_rw(uint32_t port, uint8_t opcode, uint8_t addr, - uint32_t *val) -{ - volatile uint32_t *ptr; - int timeout = 0; - uint32_t cmd, devfn, be, bar; - - bar = 0; - be = 0xf; - devfn = 16; - - cmd = (devfn << IOSF_DEVFN_SHIFT) | (opcode << IOSF_OPCODE_SHIFT) | - (port << IOSF_PORT_SHIFT) | (be << IOSF_BYTE_ENABLES_SHIFT) | - (bar << IOSF_BAR_SHIFT); - - ptr = (volatile uint32_t*)((volatile char*)mmio + - VLV_IOSF_DOORBELL_REQ); - - if (*ptr & IOSF_SB_BUSY) { - fprintf(stderr, "warning: pcode (%s) mailbox access failed\n", - opcode == PUNIT_OPCODE_REG_READ ? - "read" : "write"); - return -EAGAIN; - } - - ptr = (volatile uint32_t*)((volatile char*)mmio + VLV_IOSF_ADDR); - *ptr = addr; - if (opcode == PUNIT_OPCODE_REG_WRITE) { - ptr = (volatile uint32_t*)((volatile char*)mmio + - VLV_IOSF_DATA); - *ptr = *val; - } - ptr = (volatile uint32_t*)((volatile char*)mmio + - VLV_IOSF_DOORBELL_REQ); - *ptr = cmd; - do { - usleep(1); - timeout++; - } while ((*ptr & IOSF_SB_BUSY) && timeout < TIMEOUT_US); - - if (timeout >= TIMEOUT_US) { - fprintf(stderr, "timeout waiting for pcode %s (%d) to finish\n", - opcode == PUNIT_OPCODE_REG_READ ? "read" : "write", - addr); - return -ETIMEDOUT; - } - - if (opcode == PUNIT_OPCODE_REG_READ) { - ptr = (volatile uint32_t*)((volatile char*)mmio + - VLV_IOSF_DATA); - *val = *ptr; - } - *ptr = 0; - - return 0; -} - -int intel_punit_read(uint8_t addr, uint32_t *val) -{ - return vlv_punit_rw(IOSF_PORT_PUNIT, PUNIT_OPCODE_REG_READ, addr, val); -} - -int intel_punit_write(uint8_t addr, uint32_t val) -{ - return vlv_punit_rw(IOSF_PORT_PUNIT, PUNIT_OPCODE_REG_WRITE, addr, &val); -} - -int intel_nc_read(uint8_t addr, uint32_t *val) -{ - return vlv_punit_rw(IOSF_PORT_NC, PUNIT_OPCODE_REG_READ, addr, val); -} - -int intel_nc_write(uint8_t addr, uint32_t val) -{ - return vlv_punit_rw(IOSF_PORT_NC, PUNIT_OPCODE_REG_WRITE, addr, &val); -} diff --git a/lib/intel_reg.h b/lib/intel_reg.h index 065881b..173919c 100644 --- a/lib/intel_reg.h +++ b/lib/intel_reg.h @@ -3549,20 +3549,12 @@ typedef enum { /* Valleyview related items */ -/* Valleyview DPIO registers */ #define VLV_DISPLAY_BASE 0x180000 -#define DPIO_PKT 0x2100 -#define DPIO_RID (0 << 24) -#define DPIO_OP_WRITE (1 << 16) -#define DPIO_OP_READ (0 << 16) -#define DPIO_PORTID (0x12 << 8) -#define DPIO_BYTE (0xf << 4) -#define DPIO_BUSY (1 << 0) -#define DPIO_DATA 0x2104 -#define DPIO_REG 0x2108 - -/* VLV IOSF access */ -#define VLV_IOSF_DOORBELL_REQ 0x182100 + +/* + * IOSF sideband + */ +#define VLV_IOSF_DOORBELL_REQ (VLV_DISPLAY_BASE + 0x2100) #define IOSF_DEVFN_SHIFT 24 #define IOSF_OPCODE_SHIFT 16 #define IOSF_PORT_SHIFT 8 @@ -3571,10 +3563,209 @@ typedef enum { #define IOSF_SB_BUSY (1<<0) #define IOSF_PORT_PUNIT 0x4 #define IOSF_PORT_NC 0x11 -#define VLV_IOSF_DATA 0x182104 -#define VLV_IOSF_ADDR 0x182108 +#define IOSF_PORT_DPIO 0x12 +#define VLV_IOSF_DATA (VLV_DISPLAY_BASE + 0x2104) +#define VLV_IOSF_ADDR (VLV_DISPLAY_BASE + 0x2108) #define PUNIT_OPCODE_REG_READ 6 #define PUNIT_OPCODE_REG_WRITE 7 +#define PUNIT_REG_GPU_LFM 0xd3 +#define PUNIT_REG_GPU_FREQ_REQ 0xd4 +#define PUNIT_REG_GPU_FREQ_STS 0xd8 +#define PUNIT_REG_MEDIA_TURBO_FREQ_REQ 0xdc + +#define PUNIT_FUSE_BUS2 0xf6 /* bits 47:40 */ +#define PUNIT_FUSE_BUS1 0xf5 /* bits 55:48 */ + +#define IOSF_NC_FB_GFX_FREQ_FUSE 0x1c +#define FB_GFX_MAX_FREQ_FUSE_SHIFT 3 +#define FB_GFX_MAX_FREQ_FUSE_MASK 0x000007f8 +#define FB_GFX_FGUARANTEED_FREQ_FUSE_SHIFT 11 +#define FB_GFX_FGUARANTEED_FREQ_FUSE_MASK 0x0007f800 +#define IOSF_NC_FB_GFX_FMAX_FUSE_HI 0x34 +#define FB_FMAX_VMIN_FREQ_HI_MASK 0x00000007 +#define IOSF_NC_FB_GFX_FMAX_FUSE_LO 0x30 +#define FB_FMAX_VMIN_FREQ_LO_SHIFT 27 +#define FB_FMAX_VMIN_FREQ_LO_MASK 0xf8000000 + +/* + * DPIO - a special bus for various display related registers to hide behind + * + * DPIO is VLV only. + * + * Note: digital port B is DDI0, digital port C is DDI1 + */ +#define DPIO_DEVFN 0 +#define DPIO_OPCODE_REG_WRITE 1 +#define DPIO_OPCODE_REG_READ 0 + +#define DPIO_CTL (VLV_DISPLAY_BASE + 0x2110) +#define DPIO_MODSEL1 (1<<3) /* if ref clk b == 27 */ +#define DPIO_MODSEL0 (1<<2) /* if ref clk a == 27 */ +#define DPIO_SFR_BYPASS (1<<1) +#define DPIO_RESET (1<<0) + +#define _DPIO_TX3_SWING_CTL4_A 0x690 +#define _DPIO_TX3_SWING_CTL4_B 0x2a90 +#define DPIO_TX3_SWING_CTL4(pipe) _PIPE(pipe, _DPIO_TX_SWING_CTL4_A, \ + _DPIO_TX3_SWING_CTL4_B) + +/* + * Per pipe/PLL DPIO regs + */ +#define _DPIO_DIV_A 0x800c +#define DPIO_POST_DIV_SHIFT (28) /* 3 bits */ +#define DPIO_POST_DIV_DAC 0 +#define DPIO_POST_DIV_HDMIDP 1 /* DAC 225-400M rate */ +#define DPIO_POST_DIV_LVDS1 2 +#define DPIO_POST_DIV_LVDS2 3 +#define DPIO_K_SHIFT (24) /* 4 bits */ +#define DPIO_P1_SHIFT (21) /* 3 bits */ +#define DPIO_P2_SHIFT (16) /* 5 bits */ +#define DPIO_N_SHIFT (12) /* 4 bits */ +#define DPIO_ENABLE_CALIBRATION (1<<11) +#define DPIO_M1DIV_SHIFT (8) /* 3 bits */ +#define DPIO_M2DIV_MASK 0xff +#define _DPIO_DIV_B 0x802c +#define DPIO_DIV(pipe) _PIPE(pipe, _DPIO_DIV_A, _DPIO_DIV_B) + +#define _DPIO_REFSFR_A 0x8014 +#define DPIO_REFSEL_OVERRIDE 27 +#define DPIO_PLL_MODESEL_SHIFT 24 /* 3 bits */ +#define DPIO_BIAS_CURRENT_CTL_SHIFT 21 /* 3 bits, always 0x7 */ +#define DPIO_PLL_REFCLK_SEL_SHIFT 16 /* 2 bits */ +#define DPIO_PLL_REFCLK_SEL_MASK 3 +#define DPIO_DRIVER_CTL_SHIFT 12 /* always set to 0x8 */ +#define DPIO_CLK_BIAS_CTL_SHIFT 8 /* always set to 0x5 */ +#define _DPIO_REFSFR_B 0x8034 +#define DPIO_REFSFR(pipe) _PIPE(pipe, _DPIO_REFSFR_A, _DPIO_REFSFR_B) + +#define _DPIO_CORE_CLK_A 0x801c +#define _DPIO_CORE_CLK_B 0x803c +#define DPIO_CORE_CLK(pipe) _PIPE(pipe, _DPIO_CORE_CLK_A, _DPIO_CORE_CLK_B) + +#define _DPIO_IREF_CTL_A 0x8040 +#define _DPIO_IREF_CTL_B 0x8060 +#define DPIO_IREF_CTL(pipe) _PIPE(pipe, _DPIO_IREF_CTL_A, _DPIO_IREF_CTL_B) + +#define DPIO_IREF_BCAST 0xc044 +#define _DPIO_IREF_A 0x8044 +#define _DPIO_IREF_B 0x8064 +#define DPIO_IREF(pipe) _PIPE(pipe, _DPIO_IREF_A, _DPIO_IREF_B) + +#define _DPIO_PLL_CML_A 0x804c +#define _DPIO_PLL_CML_B 0x806c +#define DPIO_PLL_CML(pipe) _PIPE(pipe, _DPIO_PLL_CML_A, _DPIO_PLL_CML_B) + +#define _DPIO_LFP_COEFF_A 0x8048 +#define _DPIO_LFP_COEFF_B 0x8068 +#define DPIO_LFP_COEFF(pipe) _PIPE(pipe, _DPIO_LFP_COEFF_A, _DPIO_LFP_COEFF_B) + +#define DPIO_CALIBRATION 0x80ac + +#define DPIO_FASTCLK_DISABLE 0x8100 + +/* + * Per DDI channel DPIO regs + */ + +#define _DPIO_PCS_TX_0 0x8200 +#define _DPIO_PCS_TX_1 0x8400 +#define DPIO_PCS_TX_LANE2_RESET (1<<16) +#define DPIO_PCS_TX_LANE1_RESET (1<<7) +#define DPIO_PCS_TX(port) _PORT(port, _DPIO_PCS_TX_0, _DPIO_PCS_TX_1) + +#define _DPIO_PCS_CLK_0 0x8204 +#define _DPIO_PCS_CLK_1 0x8404 +#define DPIO_PCS_CLK_CRI_RXEB_EIOS_EN (1<<22) +#define DPIO_PCS_CLK_CRI_RXDIGFILTSG_EN (1<<21) +#define DPIO_PCS_CLK_DATAWIDTH_SHIFT (6) +#define DPIO_PCS_CLK_SOFT_RESET (1<<5) +#define DPIO_PCS_CLK(port) _PORT(port, _DPIO_PCS_CLK_0, _DPIO_PCS_CLK_1) + +#define _DPIO_PCS_CTL_OVR1_A 0x8224 +#define _DPIO_PCS_CTL_OVR1_B 0x8424 +#define DPIO_PCS_CTL_OVER1(port) _PORT(port, _DPIO_PCS_CTL_OVR1_A, \ + _DPIO_PCS_CTL_OVR1_B) + +#define _DPIO_PCS_STAGGER0_A 0x822c +#define _DPIO_PCS_STAGGER0_B 0x842c +#define DPIO_PCS_STAGGER0(port) _PORT(port, _DPIO_PCS_STAGGER0_A, \ + _DPIO_PCS_STAGGER0_B) + +#define _DPIO_PCS_STAGGER1_A 0x8230 +#define _DPIO_PCS_STAGGER1_B 0x8430 +#define DPIO_PCS_STAGGER1(port) _PORT(port, _DPIO_PCS_STAGGER1_A, \ + _DPIO_PCS_STAGGER1_B) + +#define _DPIO_PCS_CLOCKBUF0_A 0x8238 +#define _DPIO_PCS_CLOCKBUF0_B 0x8438 +#define DPIO_PCS_CLOCKBUF0(port) _PORT(port, _DPIO_PCS_CLOCKBUF0_A, \ + _DPIO_PCS_CLOCKBUF0_B) + +#define _DPIO_PCS_CLOCKBUF8_A 0x825c +#define _DPIO_PCS_CLOCKBUF8_B 0x845c +#define DPIO_PCS_CLOCKBUF8(port) _PORT(port, _DPIO_PCS_CLOCKBUF8_A, \ + _DPIO_PCS_CLOCKBUF8_B) + +#define _DPIO_TX_SWING_CTL2_A 0x8288 +#define _DPIO_TX_SWING_CTL2_B 0x8488 +#define DPIO_TX_SWING_CTL2(port) _PORT(port, _DPIO_TX_SWING_CTL2_A, \ + _DPIO_TX_SWING_CTL2_B) + +#define _DPIO_TX_SWING_CTL3_A 0x828c +#define _DPIO_TX_SWING_CTL3_B 0x848c +#define DPIO_TX_SWING_CTL3(port) _PORT(port, _DPIO_TX_SWING_CTL3_A, \ + _DPIO_TX_SWING_CTL3_B) + +#define _DPIO_TX_SWING_CTL4_A 0x8290 +#define _DPIO_TX_SWING_CTL4_B 0x8490 +#define DPIO_TX_SWING_CTL4(port) _PORT(port, _DPIO_TX_SWING_CTL4_A, \ + _DPIO_TX_SWING_CTL4_B) + +#define _DPIO_TX_OCALINIT_0 0x8294 +#define _DPIO_TX_OCALINIT_1 0x8494 +#define DPIO_TX_OCALINIT_EN (1<<31) +#define DPIO_TX_OCALINIT(port) _PORT(port, _DPIO_TX_OCALINIT_0, \ + _DPIO_TX_OCALINIT_1) + +#define _DPIO_TX_CTL_0 0x82ac +#define _DPIO_TX_CTL_1 0x84ac +#define DPIO_TX_CTL(port) _PORT(port, _DPIO_TX_CTL_0, _DPIO_TX_CTL_1) + +#define _DPIO_TX_LANE_0 0x82b8 +#define _DPIO_TX_LANE_1 0x84b8 +#define DPIO_TX_LANE(port) _PORT(port, _DPIO_TX_LANE_0, _DPIO_TX_LANE_1) + +#define _DPIO_DATA_CHANNEL1 0x8220 +#define _DPIO_DATA_CHANNEL2 0x8420 +#define DPIO_DATA_CHANNEL(port) _PORT(port, _DPIO_DATA_CHANNEL1, _DPIO_DATA_CHANNEL2) + +#define _DPIO_PORT0_PCS0 0x0220 +#define _DPIO_PORT0_PCS1 0x0420 +#define _DPIO_PORT1_PCS2 0x2620 +#define _DPIO_PORT1_PCS3 0x2820 +#define DPIO_DATA_LANE_A(port) _PORT(port, _DPIO_PORT0_PCS0, _DPIO_PORT1_PCS2) +#define DPIO_DATA_LANE_B(port) _PORT(port, _DPIO_PORT0_PCS1, _DPIO_PORT1_PCS3) +#define DPIO_DATA_CHANNEL1 0x8220 +#define DPIO_DATA_CHANNEL2 0x8420 + +/* Sideband Interface (SBI) is programmed indirectly, via + * SBI_ADDR, which contains the register offset; and SBI_DATA, + * which contains the payload */ +#define SBI_ADDR 0xC6000 +#define SBI_DATA 0xC6004 +#define SBI_CTL_STAT 0xC6008 +#define SBI_CTL_DEST_ICLK (0x0<<16) +#define SBI_CTL_DEST_MPHY (0x1<<16) +#define SBI_CTL_OP_IORD (0x2<<8) +#define SBI_CTL_OP_IOWR (0x3<<8) +#define SBI_CTL_OP_CRRD (0x6<<8) +#define SBI_CTL_OP_CRWR (0x7<<8) +#define SBI_RESPONSE_FAIL (0x1<<1) +#define SBI_RESPONSE_SUCCESS (0x0<<1) +#define SBI_BUSY (0x1<<0) +#define SBI_READY (0x0<<0) + #endif /* _I810_REG_H */ diff --git a/lib/intel_sideband.c b/lib/intel_sideband.c new file mode 100644 index 0000000..0271944 --- /dev/null +++ b/lib/intel_sideband.c @@ -0,0 +1,191 @@ +/* + * This file is generated from scripts/sync-from-kernel, do not hand-edit. + * This file is is from kernel v3.9-rc1-15371-g393f670 + */ +/* + * Copyright ? 2013 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +#include "i915_drv.h" +#include "intel_drv.h" + +/* IOSF sideband */ +static int vlv_sideband_rw(struct drm_i915_private *dev_priv, u32 devfn, + u32 port, u32 opcode, u32 addr, u32 *val) +{ + u32 cmd, be = 0xf, bar = 0; + bool is_read = (opcode == PUNIT_OPCODE_REG_READ || + opcode == DPIO_OPCODE_REG_READ); + + cmd = (devfn << IOSF_DEVFN_SHIFT) | (opcode << IOSF_OPCODE_SHIFT) | + (port << IOSF_PORT_SHIFT) | (be << IOSF_BYTE_ENABLES_SHIFT) | + (bar << IOSF_BAR_SHIFT); + + WARN_ON(!mutex_is_locked(&dev_priv->dpio_lock)); + + if (wait_for((I915_READ(VLV_IOSF_DOORBELL_REQ) & IOSF_SB_BUSY) == 0, 5)) { + DRM_DEBUG_DRIVER("IOSF sideband idle wait (%s) timed out\n", + is_read ? "read" : "write"); + return -EAGAIN; + } + + I915_WRITE(VLV_IOSF_ADDR, addr); + if (!is_read) + I915_WRITE(VLV_IOSF_DATA, *val); + I915_WRITE(VLV_IOSF_DOORBELL_REQ, cmd); + + if (wait_for((I915_READ(VLV_IOSF_DOORBELL_REQ) & IOSF_SB_BUSY) == 0, 5)) { + DRM_DEBUG_DRIVER("IOSF sideband finish wait (%s) timed out\n", + is_read ? "read" : "write"); + return -ETIMEDOUT; + } + + if (is_read) + *val = I915_READ(VLV_IOSF_DATA); + I915_WRITE(VLV_IOSF_DATA, 0); + + return 0; +} + +u32 vlv_punit_read(struct drm_i915_private *dev_priv, u8 addr) +{ + u32 val = 0; + + WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock)); + + mutex_lock(&dev_priv->dpio_lock); + vlv_sideband_rw(dev_priv, PCI_DEVFN(2, 0), IOSF_PORT_PUNIT, + PUNIT_OPCODE_REG_READ, addr, &val); + mutex_unlock(&dev_priv->dpio_lock); + + return val; +} + +void vlv_punit_write(struct drm_i915_private *dev_priv, u8 addr, u32 val) +{ + WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock)); + + mutex_lock(&dev_priv->dpio_lock); + vlv_sideband_rw(dev_priv, PCI_DEVFN(2, 0), IOSF_PORT_PUNIT, + PUNIT_OPCODE_REG_WRITE, addr, &val); + mutex_unlock(&dev_priv->dpio_lock); +} + +u32 vlv_nc_read(struct drm_i915_private *dev_priv, u8 addr) +{ + u32 val = 0; + + WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock)); + + mutex_lock(&dev_priv->dpio_lock); + vlv_sideband_rw(dev_priv, PCI_DEVFN(2, 0), IOSF_PORT_NC, + PUNIT_OPCODE_REG_READ, addr, &val); + mutex_unlock(&dev_priv->dpio_lock); + + return val; +} + +void vlv_nc_write(struct drm_i915_private *dev_priv, u8 addr, u32 val) +{ + WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock)); + + mutex_lock(&dev_priv->dpio_lock); + vlv_sideband_rw(dev_priv, PCI_DEVFN(2, 0), IOSF_PORT_NC, + PUNIT_OPCODE_REG_WRITE, addr, &val); + mutex_unlock(&dev_priv->dpio_lock); +} + +u32 vlv_dpio_read(struct drm_i915_private *dev_priv, int reg) +{ + u32 val = 0; + + vlv_sideband_rw(dev_priv, DPIO_DEVFN, IOSF_PORT_DPIO, + DPIO_OPCODE_REG_READ, reg, &val); + + return val; +} + +void vlv_dpio_write(struct drm_i915_private *dev_priv, int reg, u32 val) +{ + vlv_sideband_rw(dev_priv, DPIO_DEVFN, IOSF_PORT_DPIO, + DPIO_OPCODE_REG_WRITE, reg, &val); +} + +/* SBI access */ +u32 intel_sbi_read(struct drm_i915_private *dev_priv, u16 reg, + enum intel_sbi_destination destination) +{ + u32 value = 0; + WARN_ON(!mutex_is_locked(&dev_priv->dpio_lock)); + + if (wait_for((I915_READ(SBI_CTL_STAT) & SBI_BUSY) == 0, + 100)) { + DRM_ERROR("timeout waiting for SBI to become ready\n"); + return 0; + } + + I915_WRITE(SBI_ADDR, (reg << 16)); + + if (destination == SBI_ICLK) + value = SBI_CTL_DEST_ICLK | SBI_CTL_OP_CRRD; + else + value = SBI_CTL_DEST_MPHY | SBI_CTL_OP_IORD; + I915_WRITE(SBI_CTL_STAT, value | SBI_BUSY); + + if (wait_for((I915_READ(SBI_CTL_STAT) & (SBI_BUSY | SBI_RESPONSE_FAIL)) == 0, + 100)) { + DRM_ERROR("timeout waiting for SBI to complete read transaction\n"); + return 0; + } + + return I915_READ(SBI_DATA); +} + +void intel_sbi_write(struct drm_i915_private *dev_priv, u16 reg, u32 value, + enum intel_sbi_destination destination) +{ + u32 tmp; + + WARN_ON(!mutex_is_locked(&dev_priv->dpio_lock)); + + if (wait_for((I915_READ(SBI_CTL_STAT) & SBI_BUSY) == 0, + 100)) { + DRM_ERROR("timeout waiting for SBI to become ready\n"); + return; + } + + I915_WRITE(SBI_ADDR, (reg << 16)); + I915_WRITE(SBI_DATA, value); + + if (destination == SBI_ICLK) + tmp = SBI_CTL_DEST_ICLK | SBI_CTL_OP_CRWR; + else + tmp = SBI_CTL_DEST_MPHY | SBI_CTL_OP_IOWR; + I915_WRITE(SBI_CTL_STAT, SBI_BUSY | tmp); + + if (wait_for((I915_READ(SBI_CTL_STAT) & (SBI_BUSY | SBI_RESPONSE_FAIL)) == 0, + 100)) { + DRM_ERROR("timeout waiting for SBI to complete write transaction\n"); + return; + } +} diff --git a/tools/intel_dpio_read.c b/lib/intel_sideband.h similarity index 52% copy from tools/intel_dpio_read.c copy to lib/intel_sideband.h index c0c904a..45892f5 100644 --- a/tools/intel_dpio_read.c +++ b/lib/intel_sideband.h @@ -1,5 +1,5 @@ /* - * Copyright ? 2012 Intel Corporation + * Copyright ? 2013 Intel Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -17,52 +17,30 @@ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Vijay Purushothaman <vijay.a.purushothaman at intel.com> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. * */ -#include <unistd.h> -#include <stdlib.h> -#include <stdio.h> -#include <err.h> -#include <string.h> -#include "intel_gpu_tools.h" - -static void usage(char *cmdname) -{ - printf("Warning : This program will work only on Valleyview\n"); - printf("Usage: %s [addr]\n", cmdname); - printf("\t addr : in 0xXXXX format\n"); -} - -int main(int argc, char** argv) -{ - int ret = 0; - uint32_t reg, val; - char *cmdname = strdup(argv[0]); - struct pci_device *dev = intel_get_pci_device(); - - if (argc != 2 || !IS_VALLEYVIEW(dev->device_id)) { - usage(cmdname); - ret = 1; - goto out; - } - - sscanf(argv[1], "0x%x", ®); - - intel_register_access_init(dev, 0); +#ifndef _INTEL_SIDEBAND_H_ +#define _INTEL_SIDEBAND_H_ - val = intel_dpio_reg_read(reg); +#include <stdint.h> - printf("Read DPIO register: 0x%x - Value : 0x%x\n", reg, val); +enum intel_sbi_destination { + SBI_ICLK, + SBI_MPHY, +}; - intel_register_access_fini(); +uint32_t vlv_punit_read(struct drm_i915_private *dev_priv, uint8_t addr); +void vlv_punit_write(struct drm_i915_private *dev_priv, uint8_t addr, uint32_t val); +uint32_t vlv_nc_read(struct drm_i915_private *dev_priv, uint8_t addr); +void vlv_nc_write(struct drm_i915_private *dev_priv, uint8_t addr, uint32_t val); +uint32_t vlv_dpio_read(struct drm_i915_private *dev_priv, int reg); +void vlv_dpio_write(struct drm_i915_private *dev_priv, int reg, uint32_t val); +uint32_t intel_sbi_read(struct drm_i915_private *dev_priv, uint16_t reg, + enum intel_sbi_destination destination); +void intel_sbi_write(struct drm_i915_private *dev_priv, uint16_t reg, uint32_t value, + enum intel_sbi_destination destination); -out: - free(cmdname); - return ret; -} +#endif /* _INTEL_SIDEBAND_H_ */ diff --git a/tools/intel_dpio_write.c b/lib/kernel-shim/drm-shim.h similarity index 55% copy from tools/intel_dpio_write.c copy to lib/kernel-shim/drm-shim.h index f842999..a88cf16 100644 --- a/tools/intel_dpio_write.c +++ b/lib/kernel-shim/drm-shim.h @@ -1,5 +1,5 @@ /* - * Copyright ? 2012 Intel Corporation + * Copyright ? 2013 Intel Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -17,51 +17,39 @@ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Vijay Purushothaman <vijay.a.purushothaman at intel.com> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. * */ -#include <unistd.h> -#include <stdlib.h> +#ifndef _DRM_SHIM_H_ +#define _DRM_SHIM_H_ + #include <stdio.h> -#include <err.h> -#include <string.h> -#include "intel_gpu_tools.h" -static void usage(char *cmdname) -{ - printf("Warning : This program will work only on Valleyview\n"); - printf("Usage: %s [addr] [val]\n", cmdname); - printf("\t addr : in 0xXXXX format\n"); -} +#define xstringify(s) #s +#define stringify(s) xstringify(s) -int main(int argc, char** argv) -{ - int ret = 0; - uint32_t reg, val; - char *cmdname = strdup(argv[0]); - struct pci_device *dev = intel_get_pci_device(); +#define STRLOC __FILE__ ":" stringify(__LINE__) - if (argc != 3 || !IS_VALLEYVIEW(dev->device_id)) { - usage(cmdname); - ret = 1; - goto out; - } +#define DRM_ERROR(fmt, args...) ({ \ + fprintf(stderr, "%s" fmt, STRLOC ": ", ##args); \ +}) - sscanf(argv[1], "0x%x", ®); - sscanf(argv[2], "0x%x", &val); +#define DRM_INFO(fmt, args...) ({ \ + fprintf(stdout, "%s" fmt, STRLOC ": ", ##args); \ +}) - intel_register_access_init(dev, 0); +#define DRM_DEBUG(fmt, args...) ({ \ + fprintf(stderr, "%s" fmt, STRLOC ": ", ##args); \ +}) - intel_dpio_reg_write(reg, val); +#define DRM_DEBUG_DRIVER(fmt, args...) ({ \ + fprintf(stderr, "%s" fmt, STRLOC ": ", ##args); \ +}) - intel_register_access_fini(); +#define DRM_DEBUG_KMS(fmt, args...) ({ \ + fprintf(stderr, "%s" fmt, STRLOC ": ", ##args); \ +}) -out: - free(cmdname); - return ret; -} +#endif /* _DRM_SHIM_H_ */ diff --git a/tools/intel_dpio_write.c b/lib/kernel-shim/i915_drv.h similarity index 55% copy from tools/intel_dpio_write.c copy to lib/kernel-shim/i915_drv.h index f842999..16d9d90 100644 --- a/tools/intel_dpio_write.c +++ b/lib/kernel-shim/i915_drv.h @@ -1,5 +1,5 @@ /* - * Copyright ? 2012 Intel Corporation + * Copyright ? 2013 Intel Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -17,51 +17,22 @@ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Vijay Purushothaman <vijay.a.purushothaman at intel.com> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. * */ -#include <unistd.h> -#include <stdlib.h> -#include <stdio.h> -#include <err.h> -#include <string.h> -#include "intel_gpu_tools.h" - -static void usage(char *cmdname) -{ - printf("Warning : This program will work only on Valleyview\n"); - printf("Usage: %s [addr] [val]\n", cmdname); - printf("\t addr : in 0xXXXX format\n"); -} +#ifndef _I915_DRV_H_ +#define _I915_DRV_H_ -int main(int argc, char** argv) -{ - int ret = 0; - uint32_t reg, val; - char *cmdname = strdup(argv[0]); - struct pci_device *dev = intel_get_pci_device(); +#include "kernel.h" +#include "drm-shim.h" - if (argc != 3 || !IS_VALLEYVIEW(dev->device_id)) { - usage(cmdname); - ret = 1; - goto out; - } - - sscanf(argv[1], "0x%x", ®); - sscanf(argv[2], "0x%x", &val); - - intel_register_access_init(dev, 0); +#include "intel_gpu_tools.h" - intel_dpio_reg_write(reg, val); +#define I915_READ(reg) intel_register_read((reg)) +#define I915_WRITE(reg, val) intel_register_write((reg), (val)) - intel_register_access_fini(); +#include "intel_sideband.h" -out: - free(cmdname); - return ret; -} +#endif /* _I915_DRV_H_ */ diff --git a/tools/intel_dpio_write.c b/lib/kernel-shim/intel_drv.h similarity index 55% copy from tools/intel_dpio_write.c copy to lib/kernel-shim/intel_drv.h index f842999..582643b 100644 --- a/tools/intel_dpio_write.c +++ b/lib/kernel-shim/intel_drv.h @@ -1,5 +1,5 @@ /* - * Copyright ? 2012 Intel Corporation + * Copyright ? 2013 Intel Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -17,51 +17,32 @@ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Vijay Purushothaman <vijay.a.purushothaman at intel.com> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. * */ -#include <unistd.h> -#include <stdlib.h> -#include <stdio.h> -#include <err.h> -#include <string.h> -#include "intel_gpu_tools.h" - -static void usage(char *cmdname) -{ - printf("Warning : This program will work only on Valleyview\n"); - printf("Usage: %s [addr] [val]\n", cmdname); - printf("\t addr : in 0xXXXX format\n"); -} - -int main(int argc, char** argv) -{ - int ret = 0; - uint32_t reg, val; - char *cmdname = strdup(argv[0]); - struct pci_device *dev = intel_get_pci_device(); - - if (argc != 3 || !IS_VALLEYVIEW(dev->device_id)) { - usage(cmdname); - ret = 1; - goto out; - } +#ifndef _INTEL_DRV_H_ +#define _INTEL_DRV_H_ - sscanf(argv[1], "0x%x", ®); - sscanf(argv[2], "0x%x", &val); - - intel_register_access_init(dev, 0); - - intel_dpio_reg_write(reg, val); - - intel_register_access_fini(); +#include <unistd.h> -out: - free(cmdname); - return ret; -} +#include "kernel.h" + +/* rather crude, but hopefully good enough */ +#define wait_for(COND, MS) ({ \ + unsigned int elapsed_ms = 0; \ + int ret__ = 0; \ + while (!(COND)) { \ + if (elapsed_ms > (MS)) { \ + ret__ = -ETIMEDOUT; \ + break; \ + } \ + \ + usleep(1000); \ + elapsed_ms++; \ + } \ + ret__; \ +}) + +#endif /* _INTEL_DRV_H_ */ diff --git a/tools/intel_dpio_read.c b/lib/kernel-shim/kernel.h similarity index 52% copy from tools/intel_dpio_read.c copy to lib/kernel-shim/kernel.h index c0c904a..e621408 100644 --- a/tools/intel_dpio_read.c +++ b/lib/kernel-shim/kernel.h @@ -1,5 +1,5 @@ /* - * Copyright ? 2012 Intel Corporation + * Copyright ? 2013 Intel Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -17,52 +17,54 @@ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Authors: - * Vijay Purushothaman <vijay.a.purushothaman at intel.com> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. * */ -#include <unistd.h> -#include <stdlib.h> -#include <stdio.h> -#include <err.h> -#include <string.h> +#ifndef _KERNEL_H_ +#define _KERNEL_H_ + +#include <stdint.h> +#include <stdbool.h> +#include <errno.h> + #include "intel_gpu_tools.h" -static void usage(char *cmdname) +typedef uint64_t u64; +typedef int64_t s64; +typedef unsigned int u32; +typedef signed int s32; +typedef unsigned short u16; +typedef signed short s16; +typedef unsigned char u8; +typedef signed char s8; + +static inline int mutex_is_locked(struct mutex *lock) { - printf("Warning : This program will work only on Valleyview\n"); - printf("Usage: %s [addr]\n", cmdname); - printf("\t addr : in 0xXXXX format\n"); + return 1; } -int main(int argc, char** argv) +static inline void mutex_lock(struct mutex *lock) { - int ret = 0; - uint32_t reg, val; - char *cmdname = strdup(argv[0]); - struct pci_device *dev = intel_get_pci_device(); - - if (argc != 2 || !IS_VALLEYVIEW(dev->device_id)) { - usage(cmdname); - ret = 1; - goto out; - } - - sscanf(argv[1], "0x%x", ®); - - intel_register_access_init(dev, 0); +} - val = intel_dpio_reg_read(reg); +static inline void mutex_unlock(struct mutex *lock) +{ +} - printf("Read DPIO register: 0x%x - Value : 0x%x\n", reg, val); +#define WARN_ON(cond) - intel_register_access_fini(); +/* + * The PCI interface treats multi-function devices as independent + * devices. The slot/function address of each device is encoded + * in a single byte as follows: + * + * 7:3 = slot + * 2:0 = function + */ +#define PCI_DEVFN(slot, func) ((((slot) & 0x1f) << 3) | ((func) & 0x07)) +#define PCI_SLOT(devfn) (((devfn) >> 3) & 0x1f) +#define PCI_FUNC(devfn) ((devfn) & 0x07) -out: - free(cmdname); - return ret; -} +#endif /* _KERNEL_TYPES_H_ */ diff --git a/scripts/sync-from-kernel b/scripts/sync-from-kernel new file mode 100755 index 0000000..6940815 --- /dev/null +++ b/scripts/sync-from-kernel @@ -0,0 +1,30 @@ +#!/bin/bash + +kernel_path=$1 +[ -z "$kernel_path" ] && kernel_path=. + +[ -f $kernel_path/Kconfig ] || { + echo "$kernel_path is not a path to a kernel" + exit 1 +} + +kernel_description=$(cd $kernel_path; git describe) +echo Using $kernel_description + +read -r -d '' header <<EOF +/* + * This file is generated from scripts/sync-from-kernel, do not hand-edit. + * This file is is from kernel $kernel_description + */ +EOF + +function import { + src=$1 + dst=$2 + + echo "Importing `basename $src`" + echo "$header" > $dst + cat $kernel_path/$src >> $dst +} + +import "$kernel_path/drivers/gpu/drm/i915/intel_sideband.c" lib/intel_sideband.c diff --git a/tools/intel_dpio_read.c b/tools/intel_dpio_read.c index c0c904a..52c6080 100644 --- a/tools/intel_dpio_read.c +++ b/tools/intel_dpio_read.c @@ -31,6 +31,7 @@ #include <err.h> #include <string.h> #include "intel_gpu_tools.h" +#include "intel_sideband.h" static void usage(char *cmdname) { @@ -45,6 +46,7 @@ int main(int argc, char** argv) uint32_t reg, val; char *cmdname = strdup(argv[0]); struct pci_device *dev = intel_get_pci_device(); + struct drm_i915_private dev_priv; if (argc != 2 || !IS_VALLEYVIEW(dev->device_id)) { usage(cmdname); @@ -56,7 +58,7 @@ int main(int argc, char** argv) intel_register_access_init(dev, 0); - val = intel_dpio_reg_read(reg); + val = vlv_dpio_read(&dev_priv, reg); printf("Read DPIO register: 0x%x - Value : 0x%x\n", reg, val); diff --git a/tools/intel_dpio_write.c b/tools/intel_dpio_write.c index f842999..0d519c8 100644 --- a/tools/intel_dpio_write.c +++ b/tools/intel_dpio_write.c @@ -31,6 +31,7 @@ #include <err.h> #include <string.h> #include "intel_gpu_tools.h" +#include "intel_sideband.h" static void usage(char *cmdname) { @@ -45,6 +46,7 @@ int main(int argc, char** argv) uint32_t reg, val; char *cmdname = strdup(argv[0]); struct pci_device *dev = intel_get_pci_device(); + struct drm_i915_private dev_priv; if (argc != 3 || !IS_VALLEYVIEW(dev->device_id)) { usage(cmdname); @@ -57,7 +59,7 @@ int main(int argc, char** argv) intel_register_access_init(dev, 0); - intel_dpio_reg_write(reg, val); + vlv_dpio_write(&dev_priv, reg, val); intel_register_access_fini(); diff --git a/tools/intel_nc_read.c b/tools/intel_nc_read.c index a2c2e9f..3386305 100644 --- a/tools/intel_nc_read.c +++ b/tools/intel_nc_read.c @@ -31,6 +31,7 @@ #include <err.h> #include <string.h> #include "intel_gpu_tools.h" +#include "intel_sideband.h" static void usage(char *cmdname) { @@ -45,6 +46,7 @@ int main(int argc, char** argv) uint32_t reg, val; char *cmdname = strdup(argv[0]); struct pci_device *dev = intel_get_pci_device(); + struct drm_i915_private dev_priv; if (argc != 2 || !IS_VALLEYVIEW(dev->device_id)) { usage(cmdname); @@ -56,9 +58,7 @@ int main(int argc, char** argv) intel_register_access_init(dev, 0); - ret = intel_nc_read(reg, &val); - if (ret) - fprintf(stderr, "iosf read failed: %d\n", ret); + val = vlv_nc_read(&dev_priv, reg); printf("Read IOSF register: 0x%x - Value : 0x%x\n", reg, val); diff --git a/tools/intel_nc_write.c b/tools/intel_nc_write.c index 58be79a..047269a 100644 --- a/tools/intel_nc_write.c +++ b/tools/intel_nc_write.c @@ -31,6 +31,7 @@ #include <err.h> #include <string.h> #include "intel_gpu_tools.h" +#include "intel_sideband.h" static void usage(char *cmdname) { @@ -45,6 +46,7 @@ int main(int argc, char** argv) uint32_t reg, val, tmp; char *cmdname = strdup(argv[0]); struct pci_device *dev = intel_get_pci_device(); + struct drm_i915_private dev_priv; if (argc != 3 || !IS_VALLEYVIEW(dev->device_id)) { usage(cmdname); @@ -57,14 +59,12 @@ int main(int argc, char** argv) intel_register_access_init(dev, 0); - intel_nc_read(reg, &tmp); + tmp = vlv_nc_read(&dev_priv, reg); printf("Value before: 0x%X\n", tmp); - ret = intel_nc_write(reg, val); - if (ret) - fprintf(stderr, "Nc write failed: %d\n", ret); + vlv_nc_write(&dev_priv, reg, val); - intel_nc_read(reg, &tmp); + tmp = vlv_nc_read(&dev_priv, reg); printf("Value after: 0x%X\n", tmp); intel_register_access_fini(); diff --git a/tools/intel_punit_read.c b/tools/intel_punit_read.c index 3fa2ca8..4661825 100644 --- a/tools/intel_punit_read.c +++ b/tools/intel_punit_read.c @@ -31,6 +31,7 @@ #include <err.h> #include <string.h> #include "intel_gpu_tools.h" +#include "intel_sideband.h" static void usage(char *cmdname) { @@ -45,6 +46,7 @@ int main(int argc, char** argv) uint32_t reg, val; char *cmdname = strdup(argv[0]); struct pci_device *dev = intel_get_pci_device(); + struct drm_i915_private dev_priv; if (argc != 2 || !IS_VALLEYVIEW(dev->device_id)) { usage(cmdname); @@ -56,9 +58,7 @@ int main(int argc, char** argv) intel_register_access_init(dev, 0); - ret = intel_punit_read(reg, &val); - if (ret) - fprintf(stderr, "iosf read failed: %d\n", ret); + val = vlv_punit_read(&dev_priv, reg); printf("Read IOSF register: 0x%x - Value : 0x%x\n", reg, val); diff --git a/tools/intel_punit_write.c b/tools/intel_punit_write.c index eb036ba..30d4522 100644 --- a/tools/intel_punit_write.c +++ b/tools/intel_punit_write.c @@ -31,6 +31,7 @@ #include <err.h> #include <string.h> #include "intel_gpu_tools.h" +#include "intel_sideband.h" static void usage(char *cmdname) { @@ -45,6 +46,7 @@ int main(int argc, char** argv) uint32_t reg, val, tmp; char *cmdname = strdup(argv[0]); struct pci_device *dev = intel_get_pci_device(); + struct drm_i915_private dev_priv; if (argc != 3 || !IS_VALLEYVIEW(dev->device_id)) { usage(cmdname); @@ -57,14 +59,12 @@ int main(int argc, char** argv) intel_register_access_init(dev, 0); - intel_punit_read(reg, &tmp); + tmp = vlv_punit_read(&dev_priv, reg); printf("Value before: 0x%X\n", tmp); - ret = intel_punit_write(reg, val); - if (ret) - fprintf(stderr, "Punit write failed: %d\n", ret); + vlv_punit_write(&dev_priv, reg, val); - intel_punit_read(reg, &tmp); + tmp = vlv_punit_read(&dev_priv, reg); printf("Value after: 0x%X\n", tmp); intel_register_access_fini(); -- 1.8.1.4