Commit 9255ce80 authored by Dave Airlie's avatar Dave Airlie

Merge branch 'drm-fixes-3.13' of git://people.freedesktop.org/~agd5f/linux into drm-fixes

 Some additional fixes for 3.13.  Regression fixes for audio and hw_i2c,
vram fix for some SI PX cards, race fix in the hwmon code, and a few other
odds and ends.

* 'drm-fixes-3.13' of git://people.freedesktop.org/~agd5f/linux:
  drm/radeon/atom: fix bus probes when hw_i2c is set (v2)
  drm/radeon: fix null pointer dereference in dce6+ audio code
  drm/radeon: fixup bad vram size on SI
  drm/radeon: fix VGT_GS_INSTANCE_CNT register
  drm/radeon: Fix a typo in Cayman and Evergreen registers
  drm/radeon/dpm: simplify state adjust logic for NI
  drm/radeon: add radeon_vm_bo_update trace point
  drm/radeon: add VMID allocation trace point
  drm/radeon/dpm: Convert to use devm_hwmon_register_with_groups
  drm/radeon: program DCE2 audio dto just like DCE3
  drm/radeon: fix typo in fetching mpll params
parents 89570eeb ffd3d336
...@@ -44,7 +44,7 @@ static int radeon_process_i2c_ch(struct radeon_i2c_chan *chan, ...@@ -44,7 +44,7 @@ static int radeon_process_i2c_ch(struct radeon_i2c_chan *chan,
PROCESS_I2C_CHANNEL_TRANSACTION_PS_ALLOCATION args; PROCESS_I2C_CHANNEL_TRANSACTION_PS_ALLOCATION args;
int index = GetIndexIntoMasterTable(COMMAND, ProcessI2cChannelTransaction); int index = GetIndexIntoMasterTable(COMMAND, ProcessI2cChannelTransaction);
unsigned char *base; unsigned char *base;
u16 out; u16 out = cpu_to_le16(0);
memset(&args, 0, sizeof(args)); memset(&args, 0, sizeof(args));
...@@ -55,11 +55,14 @@ static int radeon_process_i2c_ch(struct radeon_i2c_chan *chan, ...@@ -55,11 +55,14 @@ static int radeon_process_i2c_ch(struct radeon_i2c_chan *chan,
DRM_ERROR("hw i2c: tried to write too many bytes (%d vs 3)\n", num); DRM_ERROR("hw i2c: tried to write too many bytes (%d vs 3)\n", num);
return -EINVAL; return -EINVAL;
} }
args.ucRegIndex = buf[0]; if (buf == NULL)
if (num > 1) { args.ucRegIndex = 0;
else
args.ucRegIndex = buf[0];
if (num)
num--; num--;
if (num)
memcpy(&out, &buf[1], num); memcpy(&out, &buf[1], num);
}
args.lpI2CDataOut = cpu_to_le16(out); args.lpI2CDataOut = cpu_to_le16(out);
} else { } else {
if (num > ATOM_MAX_HW_I2C_READ) { if (num > ATOM_MAX_HW_I2C_READ) {
...@@ -96,14 +99,14 @@ int radeon_atom_hw_i2c_xfer(struct i2c_adapter *i2c_adap, ...@@ -96,14 +99,14 @@ int radeon_atom_hw_i2c_xfer(struct i2c_adapter *i2c_adap,
struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap); struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
struct i2c_msg *p; struct i2c_msg *p;
int i, remaining, current_count, buffer_offset, max_bytes, ret; int i, remaining, current_count, buffer_offset, max_bytes, ret;
u8 buf = 0, flags; u8 flags;
/* check for bus probe */ /* check for bus probe */
p = &msgs[0]; p = &msgs[0];
if ((num == 1) && (p->len == 0)) { if ((num == 1) && (p->len == 0)) {
ret = radeon_process_i2c_ch(i2c, ret = radeon_process_i2c_ch(i2c,
p->addr, HW_I2C_WRITE, p->addr, HW_I2C_WRITE,
&buf, 1); NULL, 0);
if (ret) if (ret)
return ret; return ret;
else else
......
...@@ -93,11 +93,13 @@ void dce6_afmt_select_pin(struct drm_encoder *encoder) ...@@ -93,11 +93,13 @@ void dce6_afmt_select_pin(struct drm_encoder *encoder)
struct radeon_device *rdev = encoder->dev->dev_private; struct radeon_device *rdev = encoder->dev->dev_private;
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
u32 offset = dig->afmt->offset; u32 offset;
if (!dig->afmt->pin) if (!dig || !dig->afmt || !dig->afmt->pin)
return; return;
offset = dig->afmt->offset;
WREG32(AFMT_AUDIO_SRC_CONTROL + offset, WREG32(AFMT_AUDIO_SRC_CONTROL + offset,
AFMT_AUDIO_SRC_SELECT(dig->afmt->pin->id)); AFMT_AUDIO_SRC_SELECT(dig->afmt->pin->id));
} }
...@@ -112,7 +114,7 @@ void dce6_afmt_write_latency_fields(struct drm_encoder *encoder, ...@@ -112,7 +114,7 @@ void dce6_afmt_write_latency_fields(struct drm_encoder *encoder,
struct radeon_connector *radeon_connector = NULL; struct radeon_connector *radeon_connector = NULL;
u32 tmp = 0, offset; u32 tmp = 0, offset;
if (!dig->afmt->pin) if (!dig || !dig->afmt || !dig->afmt->pin)
return; return;
offset = dig->afmt->pin->offset; offset = dig->afmt->pin->offset;
...@@ -156,7 +158,7 @@ void dce6_afmt_write_speaker_allocation(struct drm_encoder *encoder) ...@@ -156,7 +158,7 @@ void dce6_afmt_write_speaker_allocation(struct drm_encoder *encoder)
u8 *sadb; u8 *sadb;
int sad_count; int sad_count;
if (!dig->afmt->pin) if (!dig || !dig->afmt || !dig->afmt->pin)
return; return;
offset = dig->afmt->pin->offset; offset = dig->afmt->pin->offset;
...@@ -217,7 +219,7 @@ void dce6_afmt_write_sad_regs(struct drm_encoder *encoder) ...@@ -217,7 +219,7 @@ void dce6_afmt_write_sad_regs(struct drm_encoder *encoder)
{ AZ_F0_CODEC_PIN_CONTROL_AUDIO_DESCRIPTOR13, HDMI_AUDIO_CODING_TYPE_WMA_PRO }, { AZ_F0_CODEC_PIN_CONTROL_AUDIO_DESCRIPTOR13, HDMI_AUDIO_CODING_TYPE_WMA_PRO },
}; };
if (!dig->afmt->pin) if (!dig || !dig->afmt || !dig->afmt->pin)
return; return;
offset = dig->afmt->pin->offset; offset = dig->afmt->pin->offset;
......
...@@ -785,8 +785,8 @@ static void ni_apply_state_adjust_rules(struct radeon_device *rdev, ...@@ -785,8 +785,8 @@ static void ni_apply_state_adjust_rules(struct radeon_device *rdev,
struct ni_ps *ps = ni_get_ps(rps); struct ni_ps *ps = ni_get_ps(rps);
struct radeon_clock_and_voltage_limits *max_limits; struct radeon_clock_and_voltage_limits *max_limits;
bool disable_mclk_switching; bool disable_mclk_switching;
u32 mclk, sclk; u32 mclk;
u16 vddc, vddci; u16 vddci;
u32 max_sclk_vddc, max_mclk_vddci, max_mclk_vddc; u32 max_sclk_vddc, max_mclk_vddci, max_mclk_vddc;
int i; int i;
...@@ -839,24 +839,14 @@ static void ni_apply_state_adjust_rules(struct radeon_device *rdev, ...@@ -839,24 +839,14 @@ static void ni_apply_state_adjust_rules(struct radeon_device *rdev,
/* XXX validate the min clocks required for display */ /* XXX validate the min clocks required for display */
/* adjust low state */
if (disable_mclk_switching) { if (disable_mclk_switching) {
mclk = ps->performance_levels[ps->performance_level_count - 1].mclk; ps->performance_levels[0].mclk =
sclk = ps->performance_levels[0].sclk; ps->performance_levels[ps->performance_level_count - 1].mclk;
vddc = ps->performance_levels[0].vddc; ps->performance_levels[0].vddci =
vddci = ps->performance_levels[ps->performance_level_count - 1].vddci; ps->performance_levels[ps->performance_level_count - 1].vddci;
} else {
sclk = ps->performance_levels[0].sclk;
mclk = ps->performance_levels[0].mclk;
vddc = ps->performance_levels[0].vddc;
vddci = ps->performance_levels[0].vddci;
} }
/* adjusted low state */
ps->performance_levels[0].sclk = sclk;
ps->performance_levels[0].mclk = mclk;
ps->performance_levels[0].vddc = vddc;
ps->performance_levels[0].vddci = vddci;
btc_skip_blacklist_clocks(rdev, max_limits->sclk, max_limits->mclk, btc_skip_blacklist_clocks(rdev, max_limits->sclk, max_limits->mclk,
&ps->performance_levels[0].sclk, &ps->performance_levels[0].sclk,
&ps->performance_levels[0].mclk); &ps->performance_levels[0].mclk);
...@@ -868,11 +858,15 @@ static void ni_apply_state_adjust_rules(struct radeon_device *rdev, ...@@ -868,11 +858,15 @@ static void ni_apply_state_adjust_rules(struct radeon_device *rdev,
ps->performance_levels[i].vddc = ps->performance_levels[i - 1].vddc; ps->performance_levels[i].vddc = ps->performance_levels[i - 1].vddc;
} }
/* adjust remaining states */
if (disable_mclk_switching) { if (disable_mclk_switching) {
mclk = ps->performance_levels[0].mclk; mclk = ps->performance_levels[0].mclk;
vddci = ps->performance_levels[0].vddci;
for (i = 1; i < ps->performance_level_count; i++) { for (i = 1; i < ps->performance_level_count; i++) {
if (mclk < ps->performance_levels[i].mclk) if (mclk < ps->performance_levels[i].mclk)
mclk = ps->performance_levels[i].mclk; mclk = ps->performance_levels[i].mclk;
if (vddci < ps->performance_levels[i].vddci)
vddci = ps->performance_levels[i].vddci;
} }
for (i = 0; i < ps->performance_level_count; i++) { for (i = 0; i < ps->performance_level_count; i++) {
ps->performance_levels[i].mclk = mclk; ps->performance_levels[i].mclk = mclk;
......
...@@ -304,9 +304,9 @@ void r600_audio_set_dto(struct drm_encoder *encoder, u32 clock) ...@@ -304,9 +304,9 @@ void r600_audio_set_dto(struct drm_encoder *encoder, u32 clock)
WREG32(DCCG_AUDIO_DTO1_MODULE, dto_modulo); WREG32(DCCG_AUDIO_DTO1_MODULE, dto_modulo);
WREG32(DCCG_AUDIO_DTO_SELECT, 1); /* select DTO1 */ WREG32(DCCG_AUDIO_DTO_SELECT, 1); /* select DTO1 */
} }
} else if (ASIC_IS_DCE3(rdev)) { } else {
/* according to the reg specs, this should DCE3.2 only, but in /* according to the reg specs, this should DCE3.2 only, but in
* practice it seems to cover DCE3.0/3.1 as well. * practice it seems to cover DCE2.0/3.0/3.1 as well.
*/ */
if (dig->dig_encoder == 0) { if (dig->dig_encoder == 0) {
WREG32(DCCG_AUDIO_DTO0_PHASE, base_rate * 100); WREG32(DCCG_AUDIO_DTO0_PHASE, base_rate * 100);
...@@ -317,10 +317,6 @@ void r600_audio_set_dto(struct drm_encoder *encoder, u32 clock) ...@@ -317,10 +317,6 @@ void r600_audio_set_dto(struct drm_encoder *encoder, u32 clock)
WREG32(DCCG_AUDIO_DTO1_MODULE, clock * 100); WREG32(DCCG_AUDIO_DTO1_MODULE, clock * 100);
WREG32(DCCG_AUDIO_DTO_SELECT, 1); /* select DTO1 */ WREG32(DCCG_AUDIO_DTO_SELECT, 1); /* select DTO1 */
} }
} else {
/* according to the reg specs, this should be DCE2.0 and DCE3.0/3.1 */
WREG32(AUDIO_DTO, AUDIO_DTO_PHASE(base_rate / 10) |
AUDIO_DTO_MODULE(clock / 10));
} }
} }
......
...@@ -2710,10 +2710,10 @@ void radeon_vm_fence(struct radeon_device *rdev, ...@@ -2710,10 +2710,10 @@ void radeon_vm_fence(struct radeon_device *rdev,
struct radeon_vm *vm, struct radeon_vm *vm,
struct radeon_fence *fence); struct radeon_fence *fence);
uint64_t radeon_vm_map_gart(struct radeon_device *rdev, uint64_t addr); uint64_t radeon_vm_map_gart(struct radeon_device *rdev, uint64_t addr);
int radeon_vm_bo_update_pte(struct radeon_device *rdev, int radeon_vm_bo_update(struct radeon_device *rdev,
struct radeon_vm *vm, struct radeon_vm *vm,
struct radeon_bo *bo, struct radeon_bo *bo,
struct ttm_mem_reg *mem); struct ttm_mem_reg *mem);
void radeon_vm_bo_invalidate(struct radeon_device *rdev, void radeon_vm_bo_invalidate(struct radeon_device *rdev,
struct radeon_bo *bo); struct radeon_bo *bo);
struct radeon_bo_va *radeon_vm_bo_find(struct radeon_vm *vm, struct radeon_bo_va *radeon_vm_bo_find(struct radeon_vm *vm,
......
...@@ -2918,7 +2918,7 @@ int radeon_atom_get_memory_pll_dividers(struct radeon_device *rdev, ...@@ -2918,7 +2918,7 @@ int radeon_atom_get_memory_pll_dividers(struct radeon_device *rdev,
mpll_param->dll_speed = args.ucDllSpeed; mpll_param->dll_speed = args.ucDllSpeed;
mpll_param->bwcntl = args.ucBWCntl; mpll_param->bwcntl = args.ucBWCntl;
mpll_param->vco_mode = mpll_param->vco_mode =
(args.ucPllCntlFlag & MPLL_CNTL_FLAG_VCO_MODE_MASK) ? 1 : 0; (args.ucPllCntlFlag & MPLL_CNTL_FLAG_VCO_MODE_MASK);
mpll_param->yclk_sel = mpll_param->yclk_sel =
(args.ucPllCntlFlag & MPLL_CNTL_FLAG_BYPASS_DQ_PLL) ? 1 : 0; (args.ucPllCntlFlag & MPLL_CNTL_FLAG_BYPASS_DQ_PLL) ? 1 : 0;
mpll_param->qdr = mpll_param->qdr =
......
...@@ -360,13 +360,13 @@ static int radeon_bo_vm_update_pte(struct radeon_cs_parser *parser, ...@@ -360,13 +360,13 @@ static int radeon_bo_vm_update_pte(struct radeon_cs_parser *parser,
struct radeon_bo *bo; struct radeon_bo *bo;
int r; int r;
r = radeon_vm_bo_update_pte(rdev, vm, rdev->ring_tmp_bo.bo, &rdev->ring_tmp_bo.bo->tbo.mem); r = radeon_vm_bo_update(rdev, vm, rdev->ring_tmp_bo.bo, &rdev->ring_tmp_bo.bo->tbo.mem);
if (r) { if (r) {
return r; return r;
} }
list_for_each_entry(lobj, &parser->validated, tv.head) { list_for_each_entry(lobj, &parser->validated, tv.head) {
bo = lobj->bo; bo = lobj->bo;
r = radeon_vm_bo_update_pte(parser->rdev, vm, bo, &bo->tbo.mem); r = radeon_vm_bo_update(parser->rdev, vm, bo, &bo->tbo.mem);
if (r) { if (r) {
return r; return r;
} }
......
...@@ -108,9 +108,10 @@ ...@@ -108,9 +108,10 @@
* 1.31- Add support for num Z pipes from GET_PARAM * 1.31- Add support for num Z pipes from GET_PARAM
* 1.32- fixes for rv740 setup * 1.32- fixes for rv740 setup
* 1.33- Add r6xx/r7xx const buffer support * 1.33- Add r6xx/r7xx const buffer support
* 1.34- fix evergreen/cayman GS register
*/ */
#define DRIVER_MAJOR 1 #define DRIVER_MAJOR 1
#define DRIVER_MINOR 33 #define DRIVER_MINOR 34
#define DRIVER_PATCHLEVEL 0 #define DRIVER_PATCHLEVEL 0
long radeon_drm_ioctl(struct file *filp, long radeon_drm_ioctl(struct file *filp,
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <drm/radeon_drm.h> #include <drm/radeon_drm.h>
#include "radeon.h" #include "radeon.h"
#include "radeon_reg.h" #include "radeon_reg.h"
#include "radeon_trace.h"
/* /*
* GART * GART
...@@ -737,6 +738,7 @@ struct radeon_fence *radeon_vm_grab_id(struct radeon_device *rdev, ...@@ -737,6 +738,7 @@ struct radeon_fence *radeon_vm_grab_id(struct radeon_device *rdev,
for (i = 0; i < 2; ++i) { for (i = 0; i < 2; ++i) {
if (choices[i]) { if (choices[i]) {
vm->id = choices[i]; vm->id = choices[i];
trace_radeon_vm_grab_id(vm->id, ring);
return rdev->vm_manager.active[choices[i]]; return rdev->vm_manager.active[choices[i]];
} }
} }
...@@ -1116,7 +1118,7 @@ static void radeon_vm_update_ptes(struct radeon_device *rdev, ...@@ -1116,7 +1118,7 @@ static void radeon_vm_update_ptes(struct radeon_device *rdev,
} }
/** /**
* radeon_vm_bo_update_pte - map a bo into the vm page table * radeon_vm_bo_update - map a bo into the vm page table
* *
* @rdev: radeon_device pointer * @rdev: radeon_device pointer
* @vm: requested vm * @vm: requested vm
...@@ -1128,10 +1130,10 @@ static void radeon_vm_update_ptes(struct radeon_device *rdev, ...@@ -1128,10 +1130,10 @@ static void radeon_vm_update_ptes(struct radeon_device *rdev,
* *
* Object have to be reserved & global and local mutex must be locked! * Object have to be reserved & global and local mutex must be locked!
*/ */
int radeon_vm_bo_update_pte(struct radeon_device *rdev, int radeon_vm_bo_update(struct radeon_device *rdev,
struct radeon_vm *vm, struct radeon_vm *vm,
struct radeon_bo *bo, struct radeon_bo *bo,
struct ttm_mem_reg *mem) struct ttm_mem_reg *mem)
{ {
struct radeon_ib ib; struct radeon_ib ib;
struct radeon_bo_va *bo_va; struct radeon_bo_va *bo_va;
...@@ -1176,6 +1178,8 @@ int radeon_vm_bo_update_pte(struct radeon_device *rdev, ...@@ -1176,6 +1178,8 @@ int radeon_vm_bo_update_pte(struct radeon_device *rdev,
bo_va->valid = false; bo_va->valid = false;
} }
trace_radeon_vm_bo_update(bo_va);
nptes = radeon_bo_ngpu_pages(bo); nptes = radeon_bo_ngpu_pages(bo);
/* assume two extra pdes in case the mapping overlaps the borders */ /* assume two extra pdes in case the mapping overlaps the borders */
...@@ -1257,7 +1261,7 @@ int radeon_vm_bo_rmv(struct radeon_device *rdev, ...@@ -1257,7 +1261,7 @@ int radeon_vm_bo_rmv(struct radeon_device *rdev,
mutex_lock(&rdev->vm_manager.lock); mutex_lock(&rdev->vm_manager.lock);
mutex_lock(&bo_va->vm->mutex); mutex_lock(&bo_va->vm->mutex);
if (bo_va->soffset) { if (bo_va->soffset) {
r = radeon_vm_bo_update_pte(rdev, bo_va->vm, bo_va->bo, NULL); r = radeon_vm_bo_update(rdev, bo_va->vm, bo_va->bo, NULL);
} }
mutex_unlock(&rdev->vm_manager.lock); mutex_unlock(&rdev->vm_manager.lock);
list_del(&bo_va->vm_list); list_del(&bo_va->vm_list);
......
...@@ -537,8 +537,7 @@ static ssize_t radeon_hwmon_show_temp(struct device *dev, ...@@ -537,8 +537,7 @@ static ssize_t radeon_hwmon_show_temp(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
char *buf) char *buf)
{ {
struct drm_device *ddev = dev_get_drvdata(dev); struct radeon_device *rdev = dev_get_drvdata(dev);
struct radeon_device *rdev = ddev->dev_private;
int temp; int temp;
if (rdev->asic->pm.get_temperature) if (rdev->asic->pm.get_temperature)
...@@ -566,23 +565,14 @@ static ssize_t radeon_hwmon_show_temp_thresh(struct device *dev, ...@@ -566,23 +565,14 @@ static ssize_t radeon_hwmon_show_temp_thresh(struct device *dev,
return snprintf(buf, PAGE_SIZE, "%d\n", temp); return snprintf(buf, PAGE_SIZE, "%d\n", temp);
} }
static ssize_t radeon_hwmon_show_name(struct device *dev,
struct device_attribute *attr,
char *buf)
{
return sprintf(buf, "radeon\n");
}
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, radeon_hwmon_show_temp, NULL, 0); static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, radeon_hwmon_show_temp, NULL, 0);
static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, radeon_hwmon_show_temp_thresh, NULL, 0); static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, radeon_hwmon_show_temp_thresh, NULL, 0);
static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IRUGO, radeon_hwmon_show_temp_thresh, NULL, 1); static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IRUGO, radeon_hwmon_show_temp_thresh, NULL, 1);
static SENSOR_DEVICE_ATTR(name, S_IRUGO, radeon_hwmon_show_name, NULL, 0);
static struct attribute *hwmon_attributes[] = { static struct attribute *hwmon_attributes[] = {
&sensor_dev_attr_temp1_input.dev_attr.attr, &sensor_dev_attr_temp1_input.dev_attr.attr,
&sensor_dev_attr_temp1_crit.dev_attr.attr, &sensor_dev_attr_temp1_crit.dev_attr.attr,
&sensor_dev_attr_temp1_crit_hyst.dev_attr.attr, &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr,
&sensor_dev_attr_name.dev_attr.attr,
NULL NULL
}; };
...@@ -607,11 +597,15 @@ static const struct attribute_group hwmon_attrgroup = { ...@@ -607,11 +597,15 @@ static const struct attribute_group hwmon_attrgroup = {
.is_visible = hwmon_attributes_visible, .is_visible = hwmon_attributes_visible,
}; };
static const struct attribute_group *hwmon_groups[] = {
&hwmon_attrgroup,
NULL
};
static int radeon_hwmon_init(struct radeon_device *rdev) static int radeon_hwmon_init(struct radeon_device *rdev)
{ {
int err = 0; int err = 0;
struct device *hwmon_dev;
rdev->pm.int_hwmon_dev = NULL;
switch (rdev->pm.int_thermal_type) { switch (rdev->pm.int_thermal_type) {
case THERMAL_TYPE_RV6XX: case THERMAL_TYPE_RV6XX:
...@@ -624,20 +618,13 @@ static int radeon_hwmon_init(struct radeon_device *rdev) ...@@ -624,20 +618,13 @@ static int radeon_hwmon_init(struct radeon_device *rdev)
case THERMAL_TYPE_KV: case THERMAL_TYPE_KV:
if (rdev->asic->pm.get_temperature == NULL) if (rdev->asic->pm.get_temperature == NULL)
return err; return err;
rdev->pm.int_hwmon_dev = hwmon_device_register(rdev->dev); hwmon_dev = hwmon_device_register_with_groups(rdev->dev,
if (IS_ERR(rdev->pm.int_hwmon_dev)) { "radeon", rdev,
err = PTR_ERR(rdev->pm.int_hwmon_dev); hwmon_groups);
if (IS_ERR(hwmon_dev)) {
err = PTR_ERR(hwmon_dev);
dev_err(rdev->dev, dev_err(rdev->dev,
"Unable to register hwmon device: %d\n", err); "Unable to register hwmon device: %d\n", err);
break;
}
dev_set_drvdata(rdev->pm.int_hwmon_dev, rdev->ddev);
err = sysfs_create_group(&rdev->pm.int_hwmon_dev->kobj,
&hwmon_attrgroup);
if (err) {
dev_err(rdev->dev,
"Unable to create hwmon sysfs file: %d\n", err);
hwmon_device_unregister(rdev->dev);
} }
break; break;
default: default:
...@@ -647,14 +634,6 @@ static int radeon_hwmon_init(struct radeon_device *rdev) ...@@ -647,14 +634,6 @@ static int radeon_hwmon_init(struct radeon_device *rdev)
return err; return err;
} }
static void radeon_hwmon_fini(struct radeon_device *rdev)
{
if (rdev->pm.int_hwmon_dev) {
sysfs_remove_group(&rdev->pm.int_hwmon_dev->kobj, &hwmon_attrgroup);
hwmon_device_unregister(rdev->pm.int_hwmon_dev);
}
}
static void radeon_dpm_thermal_work_handler(struct work_struct *work) static void radeon_dpm_thermal_work_handler(struct work_struct *work)
{ {
struct radeon_device *rdev = struct radeon_device *rdev =
...@@ -1337,8 +1316,6 @@ static void radeon_pm_fini_old(struct radeon_device *rdev) ...@@ -1337,8 +1316,6 @@ static void radeon_pm_fini_old(struct radeon_device *rdev)
if (rdev->pm.power_state) if (rdev->pm.power_state)
kfree(rdev->pm.power_state); kfree(rdev->pm.power_state);
radeon_hwmon_fini(rdev);
} }
static void radeon_pm_fini_dpm(struct radeon_device *rdev) static void radeon_pm_fini_dpm(struct radeon_device *rdev)
...@@ -1358,8 +1335,6 @@ static void radeon_pm_fini_dpm(struct radeon_device *rdev) ...@@ -1358,8 +1335,6 @@ static void radeon_pm_fini_dpm(struct radeon_device *rdev)
if (rdev->pm.power_state) if (rdev->pm.power_state)
kfree(rdev->pm.power_state); kfree(rdev->pm.power_state);
radeon_hwmon_fini(rdev);
} }
void radeon_pm_fini(struct radeon_device *rdev) void radeon_pm_fini(struct radeon_device *rdev)
......
...@@ -47,6 +47,39 @@ TRACE_EVENT(radeon_cs, ...@@ -47,6 +47,39 @@ TRACE_EVENT(radeon_cs,
__entry->fences) __entry->fences)
); );
TRACE_EVENT(radeon_vm_grab_id,
TP_PROTO(unsigned vmid, int ring),
TP_ARGS(vmid, ring),
TP_STRUCT__entry(
__field(u32, vmid)
__field(u32, ring)
),
TP_fast_assign(
__entry->vmid = vmid;
__entry->ring = ring;
),
TP_printk("vmid=%u, ring=%u", __entry->vmid, __entry->ring)
);
TRACE_EVENT(radeon_vm_bo_update,
TP_PROTO(struct radeon_bo_va *bo_va),
TP_ARGS(bo_va),
TP_STRUCT__entry(
__field(u64, soffset)
__field(u64, eoffset)
__field(u32, flags)
),
TP_fast_assign(
__entry->soffset = bo_va->soffset;
__entry->eoffset = bo_va->eoffset;
__entry->flags = bo_va->flags;
),
TP_printk("soffs=%010llx, eoffs=%010llx, flags=%08x",
__entry->soffset, __entry->eoffset, __entry->flags)
);
TRACE_EVENT(radeon_vm_set_page, TRACE_EVENT(radeon_vm_set_page,
TP_PROTO(uint64_t pe, uint64_t addr, unsigned count, TP_PROTO(uint64_t pe, uint64_t addr, unsigned count,
uint32_t incr, uint32_t flags), uint32_t incr, uint32_t flags),
......
...@@ -21,7 +21,7 @@ cayman 0x9400 ...@@ -21,7 +21,7 @@ cayman 0x9400
0x000089AC VGT_COMPUTE_THREAD_GOURP_SIZE 0x000089AC VGT_COMPUTE_THREAD_GOURP_SIZE
0x000089B0 VGT_HS_OFFCHIP_PARAM 0x000089B0 VGT_HS_OFFCHIP_PARAM
0x00008A14 PA_CL_ENHANCE 0x00008A14 PA_CL_ENHANCE
0x00008A60 PA_SC_LINE_STIPPLE_VALUE 0x00008A60 PA_SU_LINE_STIPPLE_VALUE
0x00008B10 PA_SC_LINE_STIPPLE_STATE 0x00008B10 PA_SC_LINE_STIPPLE_STATE
0x00008BF0 PA_SC_ENHANCE 0x00008BF0 PA_SC_ENHANCE
0x00008D8C SQ_DYN_GPR_CNTL_PS_FLUSH_REQ 0x00008D8C SQ_DYN_GPR_CNTL_PS_FLUSH_REQ
...@@ -532,7 +532,7 @@ cayman 0x9400 ...@@ -532,7 +532,7 @@ cayman 0x9400
0x00028B84 PA_SU_POLY_OFFSET_FRONT_OFFSET 0x00028B84 PA_SU_POLY_OFFSET_FRONT_OFFSET
0x00028B88 PA_SU_POLY_OFFSET_BACK_SCALE 0x00028B88 PA_SU_POLY_OFFSET_BACK_SCALE
0x00028B8C PA_SU_POLY_OFFSET_BACK_OFFSET 0x00028B8C PA_SU_POLY_OFFSET_BACK_OFFSET
0x00028B74 VGT_GS_INSTANCE_CNT 0x00028B90 VGT_GS_INSTANCE_CNT
0x00028BD4 PA_SC_CENTROID_PRIORITY_0 0x00028BD4 PA_SC_CENTROID_PRIORITY_0
0x00028BD8 PA_SC_CENTROID_PRIORITY_1 0x00028BD8 PA_SC_CENTROID_PRIORITY_1
0x00028BDC PA_SC_LINE_CNTL 0x00028BDC PA_SC_LINE_CNTL
......
...@@ -22,7 +22,7 @@ evergreen 0x9400 ...@@ -22,7 +22,7 @@ evergreen 0x9400
0x000089A4 VGT_COMPUTE_START_Z 0x000089A4 VGT_COMPUTE_START_Z
0x000089AC VGT_COMPUTE_THREAD_GOURP_SIZE 0x000089AC VGT_COMPUTE_THREAD_GOURP_SIZE
0x00008A14 PA_CL_ENHANCE 0x00008A14 PA_CL_ENHANCE
0x00008A60 PA_SC_LINE_STIPPLE_VALUE 0x00008A60 PA_SU_LINE_STIPPLE_VALUE
0x00008B10 PA_SC_LINE_STIPPLE_STATE 0x00008B10 PA_SC_LINE_STIPPLE_STATE
0x00008BF0 PA_SC_ENHANCE 0x00008BF0 PA_SC_ENHANCE
0x00008D8C SQ_DYN_GPR_CNTL_PS_FLUSH_REQ 0x00008D8C SQ_DYN_GPR_CNTL_PS_FLUSH_REQ
...@@ -545,7 +545,7 @@ evergreen 0x9400 ...@@ -545,7 +545,7 @@ evergreen 0x9400
0x00028B84 PA_SU_POLY_OFFSET_FRONT_OFFSET 0x00028B84 PA_SU_POLY_OFFSET_FRONT_OFFSET
0x00028B88 PA_SU_POLY_OFFSET_BACK_SCALE 0x00028B88 PA_SU_POLY_OFFSET_BACK_SCALE
0x00028B8C PA_SU_POLY_OFFSET_BACK_OFFSET 0x00028B8C PA_SU_POLY_OFFSET_BACK_OFFSET
0x00028B74 VGT_GS_INSTANCE_CNT 0x00028B90 VGT_GS_INSTANCE_CNT
0x00028C00 PA_SC_LINE_CNTL 0x00028C00 PA_SC_LINE_CNTL
0x00028C08 PA_SU_VTX_CNTL 0x00028C08 PA_SU_VTX_CNTL
0x00028C0C PA_CL_GB_VERT_CLIP_ADJ 0x00028C0C PA_CL_GB_VERT_CLIP_ADJ
......
...@@ -3882,8 +3882,15 @@ static int si_mc_init(struct radeon_device *rdev) ...@@ -3882,8 +3882,15 @@ static int si_mc_init(struct radeon_device *rdev)
rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0); rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0);
rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0); rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0);
/* size in MB on si */ /* size in MB on si */
rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL; tmp = RREG32(CONFIG_MEMSIZE);
rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL; /* some boards may have garbage in the upper 16 bits */
if (tmp & 0xffff0000) {
DRM_INFO("Probable bad vram size: 0x%08x\n", tmp);
if (tmp & 0xffff)
tmp &= 0xffff;
}
rdev->mc.mc_vram_size = tmp * 1024ULL * 1024ULL;
rdev->mc.real_vram_size = rdev->mc.mc_vram_size;
rdev->mc.visible_vram_size = rdev->mc.aper_size; rdev->mc.visible_vram_size = rdev->mc.aper_size;
si_vram_gtt_location(rdev, &rdev->mc); si_vram_gtt_location(rdev, &rdev->mc);
radeon_update_bandwidth_info(rdev); radeon_update_bandwidth_info(rdev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment