cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

radeon_i2c.c (29027B)


      1/*
      2 * Copyright 2007-8 Advanced Micro Devices, Inc.
      3 * Copyright 2008 Red Hat Inc.
      4 *
      5 * Permission is hereby granted, free of charge, to any person obtaining a
      6 * copy of this software and associated documentation files (the "Software"),
      7 * to deal in the Software without restriction, including without limitation
      8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      9 * and/or sell copies of the Software, and to permit persons to whom the
     10 * Software is furnished to do so, subject to the following conditions:
     11 *
     12 * The above copyright notice and this permission notice shall be included in
     13 * all copies or substantial portions of the 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
     19 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     20 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     21 * OTHER DEALINGS IN THE SOFTWARE.
     22 *
     23 * Authors: Dave Airlie
     24 *          Alex Deucher
     25 */
     26
     27#include <linux/export.h>
     28#include <linux/pci.h>
     29
     30#include <drm/drm_device.h>
     31#include <drm/drm_edid.h>
     32#include <drm/radeon_drm.h>
     33
     34#include "radeon.h"
     35#include "atom.h"
     36
     37bool radeon_ddc_probe(struct radeon_connector *radeon_connector, bool use_aux)
     38{
     39	u8 out = 0x0;
     40	u8 buf[8];
     41	int ret;
     42	struct i2c_msg msgs[] = {
     43		{
     44			.addr = DDC_ADDR,
     45			.flags = 0,
     46			.len = 1,
     47			.buf = &out,
     48		},
     49		{
     50			.addr = DDC_ADDR,
     51			.flags = I2C_M_RD,
     52			.len = 8,
     53			.buf = buf,
     54		}
     55	};
     56
     57	/* on hw with routers, select right port */
     58	if (radeon_connector->router.ddc_valid)
     59		radeon_router_select_ddc_port(radeon_connector);
     60
     61	if (use_aux) {
     62		ret = i2c_transfer(&radeon_connector->ddc_bus->aux.ddc, msgs, 2);
     63	} else {
     64		ret = i2c_transfer(&radeon_connector->ddc_bus->adapter, msgs, 2);
     65	}
     66
     67	if (ret != 2)
     68		/* Couldn't find an accessible DDC on this connector */
     69		return false;
     70	/* Probe also for valid EDID header
     71	 * EDID header starts with:
     72	 * 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00.
     73	 * Only the first 6 bytes must be valid as
     74	 * drm_edid_block_valid() can fix the last 2 bytes */
     75	if (drm_edid_header_is_valid(buf) < 6) {
     76		/* Couldn't find an accessible EDID on this
     77		 * connector */
     78		return false;
     79	}
     80	return true;
     81}
     82
     83/* bit banging i2c */
     84
     85static int pre_xfer(struct i2c_adapter *i2c_adap)
     86{
     87	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
     88	struct radeon_device *rdev = i2c->dev->dev_private;
     89	struct radeon_i2c_bus_rec *rec = &i2c->rec;
     90	uint32_t temp;
     91
     92	mutex_lock(&i2c->mutex);
     93
     94	/* RV410 appears to have a bug where the hw i2c in reset
     95	 * holds the i2c port in a bad state - switch hw i2c away before
     96	 * doing DDC - do this for all r200s/r300s/r400s for safety sake
     97	 */
     98	if (rec->hw_capable) {
     99		if ((rdev->family >= CHIP_R200) && !ASIC_IS_AVIVO(rdev)) {
    100			u32 reg;
    101
    102			if (rdev->family >= CHIP_RV350)
    103				reg = RADEON_GPIO_MONID;
    104			else if ((rdev->family == CHIP_R300) ||
    105				 (rdev->family == CHIP_R350))
    106				reg = RADEON_GPIO_DVI_DDC;
    107			else
    108				reg = RADEON_GPIO_CRT2_DDC;
    109
    110			mutex_lock(&rdev->dc_hw_i2c_mutex);
    111			if (rec->a_clk_reg == reg) {
    112				WREG32(RADEON_DVI_I2C_CNTL_0, (RADEON_I2C_SOFT_RST |
    113							       R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1)));
    114			} else {
    115				WREG32(RADEON_DVI_I2C_CNTL_0, (RADEON_I2C_SOFT_RST |
    116							       R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3)));
    117			}
    118			mutex_unlock(&rdev->dc_hw_i2c_mutex);
    119		}
    120	}
    121
    122	/* switch the pads to ddc mode */
    123	if (ASIC_IS_DCE3(rdev) && rec->hw_capable) {
    124		temp = RREG32(rec->mask_clk_reg);
    125		temp &= ~(1 << 16);
    126		WREG32(rec->mask_clk_reg, temp);
    127	}
    128
    129	/* clear the output pin values */
    130	temp = RREG32(rec->a_clk_reg) & ~rec->a_clk_mask;
    131	WREG32(rec->a_clk_reg, temp);
    132
    133	temp = RREG32(rec->a_data_reg) & ~rec->a_data_mask;
    134	WREG32(rec->a_data_reg, temp);
    135
    136	/* set the pins to input */
    137	temp = RREG32(rec->en_clk_reg) & ~rec->en_clk_mask;
    138	WREG32(rec->en_clk_reg, temp);
    139
    140	temp = RREG32(rec->en_data_reg) & ~rec->en_data_mask;
    141	WREG32(rec->en_data_reg, temp);
    142
    143	/* mask the gpio pins for software use */
    144	temp = RREG32(rec->mask_clk_reg) | rec->mask_clk_mask;
    145	WREG32(rec->mask_clk_reg, temp);
    146	temp = RREG32(rec->mask_clk_reg);
    147
    148	temp = RREG32(rec->mask_data_reg) | rec->mask_data_mask;
    149	WREG32(rec->mask_data_reg, temp);
    150	temp = RREG32(rec->mask_data_reg);
    151
    152	return 0;
    153}
    154
    155static void post_xfer(struct i2c_adapter *i2c_adap)
    156{
    157	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
    158	struct radeon_device *rdev = i2c->dev->dev_private;
    159	struct radeon_i2c_bus_rec *rec = &i2c->rec;
    160	uint32_t temp;
    161
    162	/* unmask the gpio pins for software use */
    163	temp = RREG32(rec->mask_clk_reg) & ~rec->mask_clk_mask;
    164	WREG32(rec->mask_clk_reg, temp);
    165	temp = RREG32(rec->mask_clk_reg);
    166
    167	temp = RREG32(rec->mask_data_reg) & ~rec->mask_data_mask;
    168	WREG32(rec->mask_data_reg, temp);
    169	temp = RREG32(rec->mask_data_reg);
    170
    171	mutex_unlock(&i2c->mutex);
    172}
    173
    174static int get_clock(void *i2c_priv)
    175{
    176	struct radeon_i2c_chan *i2c = i2c_priv;
    177	struct radeon_device *rdev = i2c->dev->dev_private;
    178	struct radeon_i2c_bus_rec *rec = &i2c->rec;
    179	uint32_t val;
    180
    181	/* read the value off the pin */
    182	val = RREG32(rec->y_clk_reg);
    183	val &= rec->y_clk_mask;
    184
    185	return (val != 0);
    186}
    187
    188
    189static int get_data(void *i2c_priv)
    190{
    191	struct radeon_i2c_chan *i2c = i2c_priv;
    192	struct radeon_device *rdev = i2c->dev->dev_private;
    193	struct radeon_i2c_bus_rec *rec = &i2c->rec;
    194	uint32_t val;
    195
    196	/* read the value off the pin */
    197	val = RREG32(rec->y_data_reg);
    198	val &= rec->y_data_mask;
    199
    200	return (val != 0);
    201}
    202
    203static void set_clock(void *i2c_priv, int clock)
    204{
    205	struct radeon_i2c_chan *i2c = i2c_priv;
    206	struct radeon_device *rdev = i2c->dev->dev_private;
    207	struct radeon_i2c_bus_rec *rec = &i2c->rec;
    208	uint32_t val;
    209
    210	/* set pin direction */
    211	val = RREG32(rec->en_clk_reg) & ~rec->en_clk_mask;
    212	val |= clock ? 0 : rec->en_clk_mask;
    213	WREG32(rec->en_clk_reg, val);
    214}
    215
    216static void set_data(void *i2c_priv, int data)
    217{
    218	struct radeon_i2c_chan *i2c = i2c_priv;
    219	struct radeon_device *rdev = i2c->dev->dev_private;
    220	struct radeon_i2c_bus_rec *rec = &i2c->rec;
    221	uint32_t val;
    222
    223	/* set pin direction */
    224	val = RREG32(rec->en_data_reg) & ~rec->en_data_mask;
    225	val |= data ? 0 : rec->en_data_mask;
    226	WREG32(rec->en_data_reg, val);
    227}
    228
    229/* hw i2c */
    230
    231static u32 radeon_get_i2c_prescale(struct radeon_device *rdev)
    232{
    233	u32 sclk = rdev->pm.current_sclk;
    234	u32 prescale = 0;
    235	u32 nm;
    236	u8 n, m, loop;
    237	int i2c_clock;
    238
    239	switch (rdev->family) {
    240	case CHIP_R100:
    241	case CHIP_RV100:
    242	case CHIP_RS100:
    243	case CHIP_RV200:
    244	case CHIP_RS200:
    245	case CHIP_R200:
    246	case CHIP_RV250:
    247	case CHIP_RS300:
    248	case CHIP_RV280:
    249	case CHIP_R300:
    250	case CHIP_R350:
    251	case CHIP_RV350:
    252		i2c_clock = 60;
    253		nm = (sclk * 10) / (i2c_clock * 4);
    254		for (loop = 1; loop < 255; loop++) {
    255			if ((nm / loop) < loop)
    256				break;
    257		}
    258		n = loop - 1;
    259		m = loop - 2;
    260		prescale = m | (n << 8);
    261		break;
    262	case CHIP_RV380:
    263	case CHIP_RS400:
    264	case CHIP_RS480:
    265	case CHIP_R420:
    266	case CHIP_R423:
    267	case CHIP_RV410:
    268		prescale = (((sclk * 10)/(4 * 128 * 100) + 1) << 8) + 128;
    269		break;
    270	case CHIP_RS600:
    271	case CHIP_RS690:
    272	case CHIP_RS740:
    273		/* todo */
    274		break;
    275	case CHIP_RV515:
    276	case CHIP_R520:
    277	case CHIP_RV530:
    278	case CHIP_RV560:
    279	case CHIP_RV570:
    280	case CHIP_R580:
    281		i2c_clock = 50;
    282		if (rdev->family == CHIP_R520)
    283			prescale = (127 << 8) + ((sclk * 10) / (4 * 127 * i2c_clock));
    284		else
    285			prescale = (((sclk * 10)/(4 * 128 * 100) + 1) << 8) + 128;
    286		break;
    287	case CHIP_R600:
    288	case CHIP_RV610:
    289	case CHIP_RV630:
    290	case CHIP_RV670:
    291		/* todo */
    292		break;
    293	case CHIP_RV620:
    294	case CHIP_RV635:
    295	case CHIP_RS780:
    296	case CHIP_RS880:
    297	case CHIP_RV770:
    298	case CHIP_RV730:
    299	case CHIP_RV710:
    300	case CHIP_RV740:
    301		/* todo */
    302		break;
    303	case CHIP_CEDAR:
    304	case CHIP_REDWOOD:
    305	case CHIP_JUNIPER:
    306	case CHIP_CYPRESS:
    307	case CHIP_HEMLOCK:
    308		/* todo */
    309		break;
    310	default:
    311		DRM_ERROR("i2c: unhandled radeon chip\n");
    312		break;
    313	}
    314	return prescale;
    315}
    316
    317
    318/* hw i2c engine for r1xx-4xx hardware
    319 * hw can buffer up to 15 bytes
    320 */
    321static int r100_hw_i2c_xfer(struct i2c_adapter *i2c_adap,
    322			    struct i2c_msg *msgs, int num)
    323{
    324	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
    325	struct radeon_device *rdev = i2c->dev->dev_private;
    326	struct radeon_i2c_bus_rec *rec = &i2c->rec;
    327	struct i2c_msg *p;
    328	int i, j, k, ret = num;
    329	u32 prescale;
    330	u32 i2c_cntl_0, i2c_cntl_1, i2c_data;
    331	u32 tmp, reg;
    332
    333	mutex_lock(&rdev->dc_hw_i2c_mutex);
    334	/* take the pm lock since we need a constant sclk */
    335	mutex_lock(&rdev->pm.mutex);
    336
    337	prescale = radeon_get_i2c_prescale(rdev);
    338
    339	reg = ((prescale << RADEON_I2C_PRESCALE_SHIFT) |
    340	       RADEON_I2C_DRIVE_EN |
    341	       RADEON_I2C_START |
    342	       RADEON_I2C_STOP |
    343	       RADEON_I2C_GO);
    344
    345	if (rdev->is_atom_bios) {
    346		tmp = RREG32(RADEON_BIOS_6_SCRATCH);
    347		WREG32(RADEON_BIOS_6_SCRATCH, tmp | ATOM_S6_HW_I2C_BUSY_STATE);
    348	}
    349
    350	if (rec->mm_i2c) {
    351		i2c_cntl_0 = RADEON_I2C_CNTL_0;
    352		i2c_cntl_1 = RADEON_I2C_CNTL_1;
    353		i2c_data = RADEON_I2C_DATA;
    354	} else {
    355		i2c_cntl_0 = RADEON_DVI_I2C_CNTL_0;
    356		i2c_cntl_1 = RADEON_DVI_I2C_CNTL_1;
    357		i2c_data = RADEON_DVI_I2C_DATA;
    358
    359		switch (rdev->family) {
    360		case CHIP_R100:
    361		case CHIP_RV100:
    362		case CHIP_RS100:
    363		case CHIP_RV200:
    364		case CHIP_RS200:
    365		case CHIP_RS300:
    366			switch (rec->mask_clk_reg) {
    367			case RADEON_GPIO_DVI_DDC:
    368				/* no gpio select bit */
    369				break;
    370			default:
    371				DRM_ERROR("gpio not supported with hw i2c\n");
    372				ret = -EINVAL;
    373				goto done;
    374			}
    375			break;
    376		case CHIP_R200:
    377			/* only bit 4 on r200 */
    378			switch (rec->mask_clk_reg) {
    379			case RADEON_GPIO_DVI_DDC:
    380				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
    381				break;
    382			case RADEON_GPIO_MONID:
    383				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
    384				break;
    385			default:
    386				DRM_ERROR("gpio not supported with hw i2c\n");
    387				ret = -EINVAL;
    388				goto done;
    389			}
    390			break;
    391		case CHIP_RV250:
    392		case CHIP_RV280:
    393			/* bits 3 and 4 */
    394			switch (rec->mask_clk_reg) {
    395			case RADEON_GPIO_DVI_DDC:
    396				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
    397				break;
    398			case RADEON_GPIO_VGA_DDC:
    399				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC2);
    400				break;
    401			case RADEON_GPIO_CRT2_DDC:
    402				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
    403				break;
    404			default:
    405				DRM_ERROR("gpio not supported with hw i2c\n");
    406				ret = -EINVAL;
    407				goto done;
    408			}
    409			break;
    410		case CHIP_R300:
    411		case CHIP_R350:
    412			/* only bit 4 on r300/r350 */
    413			switch (rec->mask_clk_reg) {
    414			case RADEON_GPIO_VGA_DDC:
    415				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
    416				break;
    417			case RADEON_GPIO_DVI_DDC:
    418				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
    419				break;
    420			default:
    421				DRM_ERROR("gpio not supported with hw i2c\n");
    422				ret = -EINVAL;
    423				goto done;
    424			}
    425			break;
    426		case CHIP_RV350:
    427		case CHIP_RV380:
    428		case CHIP_R420:
    429		case CHIP_R423:
    430		case CHIP_RV410:
    431		case CHIP_RS400:
    432		case CHIP_RS480:
    433			/* bits 3 and 4 */
    434			switch (rec->mask_clk_reg) {
    435			case RADEON_GPIO_VGA_DDC:
    436				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
    437				break;
    438			case RADEON_GPIO_DVI_DDC:
    439				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC2);
    440				break;
    441			case RADEON_GPIO_MONID:
    442				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
    443				break;
    444			default:
    445				DRM_ERROR("gpio not supported with hw i2c\n");
    446				ret = -EINVAL;
    447				goto done;
    448			}
    449			break;
    450		default:
    451			DRM_ERROR("unsupported asic\n");
    452			ret = -EINVAL;
    453			goto done;
    454			break;
    455		}
    456	}
    457
    458	/* check for bus probe */
    459	p = &msgs[0];
    460	if ((num == 1) && (p->len == 0)) {
    461		WREG32(i2c_cntl_0, (RADEON_I2C_DONE |
    462				    RADEON_I2C_NACK |
    463				    RADEON_I2C_HALT |
    464				    RADEON_I2C_SOFT_RST));
    465		WREG32(i2c_data, (p->addr << 1) & 0xff);
    466		WREG32(i2c_data, 0);
    467		WREG32(i2c_cntl_1, ((1 << RADEON_I2C_DATA_COUNT_SHIFT) |
    468				    (1 << RADEON_I2C_ADDR_COUNT_SHIFT) |
    469				    RADEON_I2C_EN |
    470				    (48 << RADEON_I2C_TIME_LIMIT_SHIFT)));
    471		WREG32(i2c_cntl_0, reg);
    472		for (k = 0; k < 32; k++) {
    473			udelay(10);
    474			tmp = RREG32(i2c_cntl_0);
    475			if (tmp & RADEON_I2C_GO)
    476				continue;
    477			tmp = RREG32(i2c_cntl_0);
    478			if (tmp & RADEON_I2C_DONE)
    479				break;
    480			else {
    481				DRM_DEBUG("i2c write error 0x%08x\n", tmp);
    482				WREG32(i2c_cntl_0, tmp | RADEON_I2C_ABORT);
    483				ret = -EIO;
    484				goto done;
    485			}
    486		}
    487		goto done;
    488	}
    489
    490	for (i = 0; i < num; i++) {
    491		p = &msgs[i];
    492		for (j = 0; j < p->len; j++) {
    493			if (p->flags & I2C_M_RD) {
    494				WREG32(i2c_cntl_0, (RADEON_I2C_DONE |
    495						    RADEON_I2C_NACK |
    496						    RADEON_I2C_HALT |
    497						    RADEON_I2C_SOFT_RST));
    498				WREG32(i2c_data, ((p->addr << 1) & 0xff) | 0x1);
    499				WREG32(i2c_cntl_1, ((1 << RADEON_I2C_DATA_COUNT_SHIFT) |
    500						    (1 << RADEON_I2C_ADDR_COUNT_SHIFT) |
    501						    RADEON_I2C_EN |
    502						    (48 << RADEON_I2C_TIME_LIMIT_SHIFT)));
    503				WREG32(i2c_cntl_0, reg | RADEON_I2C_RECEIVE);
    504				for (k = 0; k < 32; k++) {
    505					udelay(10);
    506					tmp = RREG32(i2c_cntl_0);
    507					if (tmp & RADEON_I2C_GO)
    508						continue;
    509					tmp = RREG32(i2c_cntl_0);
    510					if (tmp & RADEON_I2C_DONE)
    511						break;
    512					else {
    513						DRM_DEBUG("i2c read error 0x%08x\n", tmp);
    514						WREG32(i2c_cntl_0, tmp | RADEON_I2C_ABORT);
    515						ret = -EIO;
    516						goto done;
    517					}
    518				}
    519				p->buf[j] = RREG32(i2c_data) & 0xff;
    520			} else {
    521				WREG32(i2c_cntl_0, (RADEON_I2C_DONE |
    522						    RADEON_I2C_NACK |
    523						    RADEON_I2C_HALT |
    524						    RADEON_I2C_SOFT_RST));
    525				WREG32(i2c_data, (p->addr << 1) & 0xff);
    526				WREG32(i2c_data, p->buf[j]);
    527				WREG32(i2c_cntl_1, ((1 << RADEON_I2C_DATA_COUNT_SHIFT) |
    528						    (1 << RADEON_I2C_ADDR_COUNT_SHIFT) |
    529						    RADEON_I2C_EN |
    530						    (48 << RADEON_I2C_TIME_LIMIT_SHIFT)));
    531				WREG32(i2c_cntl_0, reg);
    532				for (k = 0; k < 32; k++) {
    533					udelay(10);
    534					tmp = RREG32(i2c_cntl_0);
    535					if (tmp & RADEON_I2C_GO)
    536						continue;
    537					tmp = RREG32(i2c_cntl_0);
    538					if (tmp & RADEON_I2C_DONE)
    539						break;
    540					else {
    541						DRM_DEBUG("i2c write error 0x%08x\n", tmp);
    542						WREG32(i2c_cntl_0, tmp | RADEON_I2C_ABORT);
    543						ret = -EIO;
    544						goto done;
    545					}
    546				}
    547			}
    548		}
    549	}
    550
    551done:
    552	WREG32(i2c_cntl_0, 0);
    553	WREG32(i2c_cntl_1, 0);
    554	WREG32(i2c_cntl_0, (RADEON_I2C_DONE |
    555			    RADEON_I2C_NACK |
    556			    RADEON_I2C_HALT |
    557			    RADEON_I2C_SOFT_RST));
    558
    559	if (rdev->is_atom_bios) {
    560		tmp = RREG32(RADEON_BIOS_6_SCRATCH);
    561		tmp &= ~ATOM_S6_HW_I2C_BUSY_STATE;
    562		WREG32(RADEON_BIOS_6_SCRATCH, tmp);
    563	}
    564
    565	mutex_unlock(&rdev->pm.mutex);
    566	mutex_unlock(&rdev->dc_hw_i2c_mutex);
    567
    568	return ret;
    569}
    570
    571/* hw i2c engine for r5xx hardware
    572 * hw can buffer up to 15 bytes
    573 */
    574static int r500_hw_i2c_xfer(struct i2c_adapter *i2c_adap,
    575			    struct i2c_msg *msgs, int num)
    576{
    577	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
    578	struct radeon_device *rdev = i2c->dev->dev_private;
    579	struct radeon_i2c_bus_rec *rec = &i2c->rec;
    580	struct i2c_msg *p;
    581	int i, j, remaining, current_count, buffer_offset, ret = num;
    582	u32 prescale;
    583	u32 tmp, reg;
    584	u32 saved1, saved2;
    585
    586	mutex_lock(&rdev->dc_hw_i2c_mutex);
    587	/* take the pm lock since we need a constant sclk */
    588	mutex_lock(&rdev->pm.mutex);
    589
    590	prescale = radeon_get_i2c_prescale(rdev);
    591
    592	/* clear gpio mask bits */
    593	tmp = RREG32(rec->mask_clk_reg);
    594	tmp &= ~rec->mask_clk_mask;
    595	WREG32(rec->mask_clk_reg, tmp);
    596	tmp = RREG32(rec->mask_clk_reg);
    597
    598	tmp = RREG32(rec->mask_data_reg);
    599	tmp &= ~rec->mask_data_mask;
    600	WREG32(rec->mask_data_reg, tmp);
    601	tmp = RREG32(rec->mask_data_reg);
    602
    603	/* clear pin values */
    604	tmp = RREG32(rec->a_clk_reg);
    605	tmp &= ~rec->a_clk_mask;
    606	WREG32(rec->a_clk_reg, tmp);
    607	tmp = RREG32(rec->a_clk_reg);
    608
    609	tmp = RREG32(rec->a_data_reg);
    610	tmp &= ~rec->a_data_mask;
    611	WREG32(rec->a_data_reg, tmp);
    612	tmp = RREG32(rec->a_data_reg);
    613
    614	/* set the pins to input */
    615	tmp = RREG32(rec->en_clk_reg);
    616	tmp &= ~rec->en_clk_mask;
    617	WREG32(rec->en_clk_reg, tmp);
    618	tmp = RREG32(rec->en_clk_reg);
    619
    620	tmp = RREG32(rec->en_data_reg);
    621	tmp &= ~rec->en_data_mask;
    622	WREG32(rec->en_data_reg, tmp);
    623	tmp = RREG32(rec->en_data_reg);
    624
    625	/* */
    626	tmp = RREG32(RADEON_BIOS_6_SCRATCH);
    627	WREG32(RADEON_BIOS_6_SCRATCH, tmp | ATOM_S6_HW_I2C_BUSY_STATE);
    628	saved1 = RREG32(AVIVO_DC_I2C_CONTROL1);
    629	saved2 = RREG32(0x494);
    630	WREG32(0x494, saved2 | 0x1);
    631
    632	WREG32(AVIVO_DC_I2C_ARBITRATION, AVIVO_DC_I2C_SW_WANTS_TO_USE_I2C);
    633	for (i = 0; i < 50; i++) {
    634		udelay(1);
    635		if (RREG32(AVIVO_DC_I2C_ARBITRATION) & AVIVO_DC_I2C_SW_CAN_USE_I2C)
    636			break;
    637	}
    638	if (i == 50) {
    639		DRM_ERROR("failed to get i2c bus\n");
    640		ret = -EBUSY;
    641		goto done;
    642	}
    643
    644	reg = AVIVO_DC_I2C_START | AVIVO_DC_I2C_STOP | AVIVO_DC_I2C_EN;
    645	switch (rec->mask_clk_reg) {
    646	case AVIVO_DC_GPIO_DDC1_MASK:
    647		reg |= AVIVO_DC_I2C_PIN_SELECT(AVIVO_SEL_DDC1);
    648		break;
    649	case AVIVO_DC_GPIO_DDC2_MASK:
    650		reg |= AVIVO_DC_I2C_PIN_SELECT(AVIVO_SEL_DDC2);
    651		break;
    652	case AVIVO_DC_GPIO_DDC3_MASK:
    653		reg |= AVIVO_DC_I2C_PIN_SELECT(AVIVO_SEL_DDC3);
    654		break;
    655	default:
    656		DRM_ERROR("gpio not supported with hw i2c\n");
    657		ret = -EINVAL;
    658		goto done;
    659	}
    660
    661	/* check for bus probe */
    662	p = &msgs[0];
    663	if ((num == 1) && (p->len == 0)) {
    664		WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
    665					      AVIVO_DC_I2C_NACK |
    666					      AVIVO_DC_I2C_HALT));
    667		WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
    668		udelay(1);
    669		WREG32(AVIVO_DC_I2C_RESET, 0);
    670
    671		WREG32(AVIVO_DC_I2C_DATA, (p->addr << 1) & 0xff);
    672		WREG32(AVIVO_DC_I2C_DATA, 0);
    673
    674		WREG32(AVIVO_DC_I2C_CONTROL3, AVIVO_DC_I2C_TIME_LIMIT(48));
    675		WREG32(AVIVO_DC_I2C_CONTROL2, (AVIVO_DC_I2C_ADDR_COUNT(1) |
    676					       AVIVO_DC_I2C_DATA_COUNT(1) |
    677					       (prescale << 16)));
    678		WREG32(AVIVO_DC_I2C_CONTROL1, reg);
    679		WREG32(AVIVO_DC_I2C_STATUS1, AVIVO_DC_I2C_GO);
    680		for (j = 0; j < 200; j++) {
    681			udelay(50);
    682			tmp = RREG32(AVIVO_DC_I2C_STATUS1);
    683			if (tmp & AVIVO_DC_I2C_GO)
    684				continue;
    685			tmp = RREG32(AVIVO_DC_I2C_STATUS1);
    686			if (tmp & AVIVO_DC_I2C_DONE)
    687				break;
    688			else {
    689				DRM_DEBUG("i2c write error 0x%08x\n", tmp);
    690				WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_ABORT);
    691				ret = -EIO;
    692				goto done;
    693			}
    694		}
    695		goto done;
    696	}
    697
    698	for (i = 0; i < num; i++) {
    699		p = &msgs[i];
    700		remaining = p->len;
    701		buffer_offset = 0;
    702		if (p->flags & I2C_M_RD) {
    703			while (remaining) {
    704				if (remaining > 15)
    705					current_count = 15;
    706				else
    707					current_count = remaining;
    708				WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
    709							      AVIVO_DC_I2C_NACK |
    710							      AVIVO_DC_I2C_HALT));
    711				WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
    712				udelay(1);
    713				WREG32(AVIVO_DC_I2C_RESET, 0);
    714
    715				WREG32(AVIVO_DC_I2C_DATA, ((p->addr << 1) & 0xff) | 0x1);
    716				WREG32(AVIVO_DC_I2C_CONTROL3, AVIVO_DC_I2C_TIME_LIMIT(48));
    717				WREG32(AVIVO_DC_I2C_CONTROL2, (AVIVO_DC_I2C_ADDR_COUNT(1) |
    718							       AVIVO_DC_I2C_DATA_COUNT(current_count) |
    719							       (prescale << 16)));
    720				WREG32(AVIVO_DC_I2C_CONTROL1, reg | AVIVO_DC_I2C_RECEIVE);
    721				WREG32(AVIVO_DC_I2C_STATUS1, AVIVO_DC_I2C_GO);
    722				for (j = 0; j < 200; j++) {
    723					udelay(50);
    724					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
    725					if (tmp & AVIVO_DC_I2C_GO)
    726						continue;
    727					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
    728					if (tmp & AVIVO_DC_I2C_DONE)
    729						break;
    730					else {
    731						DRM_DEBUG("i2c read error 0x%08x\n", tmp);
    732						WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_ABORT);
    733						ret = -EIO;
    734						goto done;
    735					}
    736				}
    737				for (j = 0; j < current_count; j++)
    738					p->buf[buffer_offset + j] = RREG32(AVIVO_DC_I2C_DATA) & 0xff;
    739				remaining -= current_count;
    740				buffer_offset += current_count;
    741			}
    742		} else {
    743			while (remaining) {
    744				if (remaining > 15)
    745					current_count = 15;
    746				else
    747					current_count = remaining;
    748				WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
    749							      AVIVO_DC_I2C_NACK |
    750							      AVIVO_DC_I2C_HALT));
    751				WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
    752				udelay(1);
    753				WREG32(AVIVO_DC_I2C_RESET, 0);
    754
    755				WREG32(AVIVO_DC_I2C_DATA, (p->addr << 1) & 0xff);
    756				for (j = 0; j < current_count; j++)
    757					WREG32(AVIVO_DC_I2C_DATA, p->buf[buffer_offset + j]);
    758
    759				WREG32(AVIVO_DC_I2C_CONTROL3, AVIVO_DC_I2C_TIME_LIMIT(48));
    760				WREG32(AVIVO_DC_I2C_CONTROL2, (AVIVO_DC_I2C_ADDR_COUNT(1) |
    761							       AVIVO_DC_I2C_DATA_COUNT(current_count) |
    762							       (prescale << 16)));
    763				WREG32(AVIVO_DC_I2C_CONTROL1, reg);
    764				WREG32(AVIVO_DC_I2C_STATUS1, AVIVO_DC_I2C_GO);
    765				for (j = 0; j < 200; j++) {
    766					udelay(50);
    767					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
    768					if (tmp & AVIVO_DC_I2C_GO)
    769						continue;
    770					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
    771					if (tmp & AVIVO_DC_I2C_DONE)
    772						break;
    773					else {
    774						DRM_DEBUG("i2c write error 0x%08x\n", tmp);
    775						WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_ABORT);
    776						ret = -EIO;
    777						goto done;
    778					}
    779				}
    780				remaining -= current_count;
    781				buffer_offset += current_count;
    782			}
    783		}
    784	}
    785
    786done:
    787	WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
    788				      AVIVO_DC_I2C_NACK |
    789				      AVIVO_DC_I2C_HALT));
    790	WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
    791	udelay(1);
    792	WREG32(AVIVO_DC_I2C_RESET, 0);
    793
    794	WREG32(AVIVO_DC_I2C_ARBITRATION, AVIVO_DC_I2C_SW_DONE_USING_I2C);
    795	WREG32(AVIVO_DC_I2C_CONTROL1, saved1);
    796	WREG32(0x494, saved2);
    797	tmp = RREG32(RADEON_BIOS_6_SCRATCH);
    798	tmp &= ~ATOM_S6_HW_I2C_BUSY_STATE;
    799	WREG32(RADEON_BIOS_6_SCRATCH, tmp);
    800
    801	mutex_unlock(&rdev->pm.mutex);
    802	mutex_unlock(&rdev->dc_hw_i2c_mutex);
    803
    804	return ret;
    805}
    806
    807static int radeon_hw_i2c_xfer(struct i2c_adapter *i2c_adap,
    808			      struct i2c_msg *msgs, int num)
    809{
    810	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
    811	struct radeon_device *rdev = i2c->dev->dev_private;
    812	struct radeon_i2c_bus_rec *rec = &i2c->rec;
    813	int ret = 0;
    814
    815	mutex_lock(&i2c->mutex);
    816
    817	switch (rdev->family) {
    818	case CHIP_R100:
    819	case CHIP_RV100:
    820	case CHIP_RS100:
    821	case CHIP_RV200:
    822	case CHIP_RS200:
    823	case CHIP_R200:
    824	case CHIP_RV250:
    825	case CHIP_RS300:
    826	case CHIP_RV280:
    827	case CHIP_R300:
    828	case CHIP_R350:
    829	case CHIP_RV350:
    830	case CHIP_RV380:
    831	case CHIP_R420:
    832	case CHIP_R423:
    833	case CHIP_RV410:
    834	case CHIP_RS400:
    835	case CHIP_RS480:
    836		ret = r100_hw_i2c_xfer(i2c_adap, msgs, num);
    837		break;
    838	case CHIP_RS600:
    839	case CHIP_RS690:
    840	case CHIP_RS740:
    841		/* XXX fill in hw i2c implementation */
    842		break;
    843	case CHIP_RV515:
    844	case CHIP_R520:
    845	case CHIP_RV530:
    846	case CHIP_RV560:
    847	case CHIP_RV570:
    848	case CHIP_R580:
    849		if (rec->mm_i2c)
    850			ret = r100_hw_i2c_xfer(i2c_adap, msgs, num);
    851		else
    852			ret = r500_hw_i2c_xfer(i2c_adap, msgs, num);
    853		break;
    854	case CHIP_R600:
    855	case CHIP_RV610:
    856	case CHIP_RV630:
    857	case CHIP_RV670:
    858		/* XXX fill in hw i2c implementation */
    859		break;
    860	case CHIP_RV620:
    861	case CHIP_RV635:
    862	case CHIP_RS780:
    863	case CHIP_RS880:
    864	case CHIP_RV770:
    865	case CHIP_RV730:
    866	case CHIP_RV710:
    867	case CHIP_RV740:
    868		/* XXX fill in hw i2c implementation */
    869		break;
    870	case CHIP_CEDAR:
    871	case CHIP_REDWOOD:
    872	case CHIP_JUNIPER:
    873	case CHIP_CYPRESS:
    874	case CHIP_HEMLOCK:
    875		/* XXX fill in hw i2c implementation */
    876		break;
    877	default:
    878		DRM_ERROR("i2c: unhandled radeon chip\n");
    879		ret = -EIO;
    880		break;
    881	}
    882
    883	mutex_unlock(&i2c->mutex);
    884
    885	return ret;
    886}
    887
    888static u32 radeon_hw_i2c_func(struct i2c_adapter *adap)
    889{
    890	return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
    891}
    892
    893static const struct i2c_algorithm radeon_i2c_algo = {
    894	.master_xfer = radeon_hw_i2c_xfer,
    895	.functionality = radeon_hw_i2c_func,
    896};
    897
    898static const struct i2c_algorithm radeon_atom_i2c_algo = {
    899	.master_xfer = radeon_atom_hw_i2c_xfer,
    900	.functionality = radeon_atom_hw_i2c_func,
    901};
    902
    903struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev,
    904					  struct radeon_i2c_bus_rec *rec,
    905					  const char *name)
    906{
    907	struct radeon_device *rdev = dev->dev_private;
    908	struct radeon_i2c_chan *i2c;
    909	int ret;
    910
    911	/* don't add the mm_i2c bus unless hw_i2c is enabled */
    912	if (rec->mm_i2c && (radeon_hw_i2c == 0))
    913		return NULL;
    914
    915	i2c = kzalloc(sizeof(struct radeon_i2c_chan), GFP_KERNEL);
    916	if (i2c == NULL)
    917		return NULL;
    918
    919	i2c->rec = *rec;
    920	i2c->adapter.owner = THIS_MODULE;
    921	i2c->adapter.class = I2C_CLASS_DDC;
    922	i2c->adapter.dev.parent = dev->dev;
    923	i2c->dev = dev;
    924	i2c_set_adapdata(&i2c->adapter, i2c);
    925	mutex_init(&i2c->mutex);
    926	if (rec->mm_i2c ||
    927	    (rec->hw_capable &&
    928	     radeon_hw_i2c &&
    929	     ((rdev->family <= CHIP_RS480) ||
    930	      ((rdev->family >= CHIP_RV515) && (rdev->family <= CHIP_R580))))) {
    931		/* set the radeon hw i2c adapter */
    932		snprintf(i2c->adapter.name, sizeof(i2c->adapter.name),
    933			 "Radeon i2c hw bus %s", name);
    934		i2c->adapter.algo = &radeon_i2c_algo;
    935		ret = i2c_add_adapter(&i2c->adapter);
    936		if (ret)
    937			goto out_free;
    938	} else if (rec->hw_capable &&
    939		   radeon_hw_i2c &&
    940		   ASIC_IS_DCE3(rdev)) {
    941		/* hw i2c using atom */
    942		snprintf(i2c->adapter.name, sizeof(i2c->adapter.name),
    943			 "Radeon i2c hw bus %s", name);
    944		i2c->adapter.algo = &radeon_atom_i2c_algo;
    945		ret = i2c_add_adapter(&i2c->adapter);
    946		if (ret)
    947			goto out_free;
    948	} else {
    949		/* set the radeon bit adapter */
    950		snprintf(i2c->adapter.name, sizeof(i2c->adapter.name),
    951			 "Radeon i2c bit bus %s", name);
    952		i2c->adapter.algo_data = &i2c->bit;
    953		i2c->bit.pre_xfer = pre_xfer;
    954		i2c->bit.post_xfer = post_xfer;
    955		i2c->bit.setsda = set_data;
    956		i2c->bit.setscl = set_clock;
    957		i2c->bit.getsda = get_data;
    958		i2c->bit.getscl = get_clock;
    959		i2c->bit.udelay = 10;
    960		i2c->bit.timeout = usecs_to_jiffies(2200);	/* from VESA */
    961		i2c->bit.data = i2c;
    962		ret = i2c_bit_add_bus(&i2c->adapter);
    963		if (ret) {
    964			DRM_ERROR("Failed to register bit i2c %s\n", name);
    965			goto out_free;
    966		}
    967	}
    968
    969	return i2c;
    970out_free:
    971	kfree(i2c);
    972	return NULL;
    973
    974}
    975
    976void radeon_i2c_destroy(struct radeon_i2c_chan *i2c)
    977{
    978	if (!i2c)
    979		return;
    980	WARN_ON(i2c->has_aux);
    981	i2c_del_adapter(&i2c->adapter);
    982	kfree(i2c);
    983}
    984
    985/* Add the default buses */
    986void radeon_i2c_init(struct radeon_device *rdev)
    987{
    988	if (radeon_hw_i2c)
    989		DRM_INFO("hw_i2c forced on, you may experience display detection problems!\n");
    990
    991	if (rdev->is_atom_bios)
    992		radeon_atombios_i2c_init(rdev);
    993	else
    994		radeon_combios_i2c_init(rdev);
    995}
    996
    997/* remove all the buses */
    998void radeon_i2c_fini(struct radeon_device *rdev)
    999{
   1000	int i;
   1001
   1002	for (i = 0; i < RADEON_MAX_I2C_BUS; i++) {
   1003		if (rdev->i2c_bus[i]) {
   1004			radeon_i2c_destroy(rdev->i2c_bus[i]);
   1005			rdev->i2c_bus[i] = NULL;
   1006		}
   1007	}
   1008}
   1009
   1010/* Add additional buses */
   1011void radeon_i2c_add(struct radeon_device *rdev,
   1012		    struct radeon_i2c_bus_rec *rec,
   1013		    const char *name)
   1014{
   1015	struct drm_device *dev = rdev->ddev;
   1016	int i;
   1017
   1018	for (i = 0; i < RADEON_MAX_I2C_BUS; i++) {
   1019		if (!rdev->i2c_bus[i]) {
   1020			rdev->i2c_bus[i] = radeon_i2c_create(dev, rec, name);
   1021			return;
   1022		}
   1023	}
   1024}
   1025
   1026/* looks up bus based on id */
   1027struct radeon_i2c_chan *radeon_i2c_lookup(struct radeon_device *rdev,
   1028					  struct radeon_i2c_bus_rec *i2c_bus)
   1029{
   1030	int i;
   1031
   1032	for (i = 0; i < RADEON_MAX_I2C_BUS; i++) {
   1033		if (rdev->i2c_bus[i] &&
   1034		    (rdev->i2c_bus[i]->rec.i2c_id == i2c_bus->i2c_id)) {
   1035			return rdev->i2c_bus[i];
   1036		}
   1037	}
   1038	return NULL;
   1039}
   1040
   1041void radeon_i2c_get_byte(struct radeon_i2c_chan *i2c_bus,
   1042			 u8 slave_addr,
   1043			 u8 addr,
   1044			 u8 *val)
   1045{
   1046	u8 out_buf[2];
   1047	u8 in_buf[2];
   1048	struct i2c_msg msgs[] = {
   1049		{
   1050			.addr = slave_addr,
   1051			.flags = 0,
   1052			.len = 1,
   1053			.buf = out_buf,
   1054		},
   1055		{
   1056			.addr = slave_addr,
   1057			.flags = I2C_M_RD,
   1058			.len = 1,
   1059			.buf = in_buf,
   1060		}
   1061	};
   1062
   1063	out_buf[0] = addr;
   1064	out_buf[1] = 0;
   1065
   1066	if (i2c_transfer(&i2c_bus->adapter, msgs, 2) == 2) {
   1067		*val = in_buf[0];
   1068		DRM_DEBUG("val = 0x%02x\n", *val);
   1069	} else {
   1070		DRM_DEBUG("i2c 0x%02x 0x%02x read failed\n",
   1071			  addr, *val);
   1072	}
   1073}
   1074
   1075void radeon_i2c_put_byte(struct radeon_i2c_chan *i2c_bus,
   1076			 u8 slave_addr,
   1077			 u8 addr,
   1078			 u8 val)
   1079{
   1080	uint8_t out_buf[2];
   1081	struct i2c_msg msg = {
   1082		.addr = slave_addr,
   1083		.flags = 0,
   1084		.len = 2,
   1085		.buf = out_buf,
   1086	};
   1087
   1088	out_buf[0] = addr;
   1089	out_buf[1] = val;
   1090
   1091	if (i2c_transfer(&i2c_bus->adapter, &msg, 1) != 1)
   1092		DRM_DEBUG("i2c 0x%02x 0x%02x write failed\n",
   1093			  addr, val);
   1094}
   1095
   1096/* ddc router switching */
   1097void radeon_router_select_ddc_port(struct radeon_connector *radeon_connector)
   1098{
   1099	u8 val;
   1100
   1101	if (!radeon_connector->router.ddc_valid)
   1102		return;
   1103
   1104	if (!radeon_connector->router_bus)
   1105		return;
   1106
   1107	radeon_i2c_get_byte(radeon_connector->router_bus,
   1108			    radeon_connector->router.i2c_addr,
   1109			    0x3, &val);
   1110	val &= ~radeon_connector->router.ddc_mux_control_pin;
   1111	radeon_i2c_put_byte(radeon_connector->router_bus,
   1112			    radeon_connector->router.i2c_addr,
   1113			    0x3, val);
   1114	radeon_i2c_get_byte(radeon_connector->router_bus,
   1115			    radeon_connector->router.i2c_addr,
   1116			    0x1, &val);
   1117	val &= ~radeon_connector->router.ddc_mux_control_pin;
   1118	val |= radeon_connector->router.ddc_mux_state;
   1119	radeon_i2c_put_byte(radeon_connector->router_bus,
   1120			    radeon_connector->router.i2c_addr,
   1121			    0x1, val);
   1122}
   1123
   1124/* clock/data router switching */
   1125void radeon_router_select_cd_port(struct radeon_connector *radeon_connector)
   1126{
   1127	u8 val;
   1128
   1129	if (!radeon_connector->router.cd_valid)
   1130		return;
   1131
   1132	if (!radeon_connector->router_bus)
   1133		return;
   1134
   1135	radeon_i2c_get_byte(radeon_connector->router_bus,
   1136			    radeon_connector->router.i2c_addr,
   1137			    0x3, &val);
   1138	val &= ~radeon_connector->router.cd_mux_control_pin;
   1139	radeon_i2c_put_byte(radeon_connector->router_bus,
   1140			    radeon_connector->router.i2c_addr,
   1141			    0x3, val);
   1142	radeon_i2c_get_byte(radeon_connector->router_bus,
   1143			    radeon_connector->router.i2c_addr,
   1144			    0x1, &val);
   1145	val &= ~radeon_connector->router.cd_mux_control_pin;
   1146	val |= radeon_connector->router.cd_mux_state;
   1147	radeon_i2c_put_byte(radeon_connector->router_bus,
   1148			    radeon_connector->router.i2c_addr,
   1149			    0x1, val);
   1150}
   1151