]> Git Repo - J-linux.git/commitdiff
Merge tag 'amd-drm-next-6.9-2024-03-01' of https://gitlab.freedesktop.org/agd5f/linux...
authorDave Airlie <[email protected]>
Fri, 8 Mar 2024 01:21:13 +0000 (11:21 +1000)
committerDave Airlie <[email protected]>
Fri, 8 Mar 2024 01:21:13 +0000 (11:21 +1000)
amd-drm-next-6.9-2024-03-01:

amdgpu:
- GC 11.5.1 updates
- Misc display cleanups
- NBIO 7.9 updates
- Backlight fixes
- DMUB fixes
- MPO fixes
- atomfirmware table updates
- SR-IOV fixes
- VCN 4.x updates
- use RMW accessors for pci config registers
- PSR fixes
- Suspend/resume fixes
- RAS fixes
- ABM fixes
- Misc code cleanups
- SI DPM fix
- Revert freesync video

amdkfd:
- Misc cleanups
- Error handling fixes

radeon:
- use RMW accessors for pci config registers

From: Alex Deucher <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
Signed-off-by: Dave Airlie <[email protected]>
1  2 
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c

index f04803a44b44fe4b7e37bd379bb61af9100cb24f,4835d6d899e79119a6197b277809eea6d8eefe84..f8b48fd93108cecc0ef75a358323c89274df2815
@@@ -304,11 -304,11 +304,11 @@@ static int amdgpu_gfx_kiq_acquire(struc
        return -EINVAL;
  }
  
- int amdgpu_gfx_kiq_init_ring(struct amdgpu_device *adev,
-                            struct amdgpu_ring *ring,
-                            struct amdgpu_irq_src *irq, int xcc_id)
+ int amdgpu_gfx_kiq_init_ring(struct amdgpu_device *adev, int xcc_id)
  {
        struct amdgpu_kiq *kiq = &adev->gfx.kiq[xcc_id];
+       struct amdgpu_irq_src *irq = &kiq->irq;
+       struct amdgpu_ring *ring = &kiq->ring;
        int r = 0;
  
        spin_lock_init(&kiq->ring_lock);
  
        ring->eop_gpu_addr = kiq->eop_gpu_addr;
        ring->no_scheduler = true;
 -      sprintf(ring->name, "kiq_%d.%d.%d.%d", xcc_id, ring->me, ring->pipe, ring->queue);
 +      snprintf(ring->name, sizeof(ring->name), "kiq_%d.%d.%d.%d",
 +               xcc_id, ring->me, ring->pipe, ring->queue);
        r = amdgpu_ring_init(adev, ring, 1024, irq, AMDGPU_CP_KIQ_IRQ_DRIVER0,
                             AMDGPU_RING_PRIO_DEFAULT, NULL);
        if (r)
index bcdd4f28b64c60e88d104634962b00d92dec3917,1010a89a17e627845c322fc4874fd1dba2f55cff..6701f1fde79cf5062ba10b389c7f38519eb928fe
@@@ -5235,6 -5235,10 +5235,10 @@@ static inline void fill_dc_dirty_rect(s
   * @new_plane_state: New state of @plane
   * @crtc_state: New state of CRTC connected to the @plane
   * @flip_addrs: DC flip tracking struct, which also tracts dirty rects
+  * @is_psr_su: Flag indicating whether Panel Self Refresh Selective Update (PSR SU) is enabled.
+  *             If PSR SU is enabled and damage clips are available, only the regions of the screen
+  *             that have changed will be updated. If PSR SU is not enabled,
+  *             or if damage clips are not available, the entire screen will be updated.
   * @dirty_regions_changed: dirty regions changed
   *
   * For PSR SU, DC informs the DMUB uController of dirty rectangle regions
@@@ -6229,7 -6233,8 +6233,8 @@@ create_stream_for_sink(struct drm_conne
                 */
                DRM_DEBUG_DRIVER("No preferred mode found\n");
        } else if (aconnector) {
-               recalculate_timing = is_freesync_video_mode(&mode, aconnector);
+               recalculate_timing = amdgpu_freesync_vid_mode &&
+                                is_freesync_video_mode(&mode, aconnector);
                if (recalculate_timing) {
                        freesync_mode = get_highest_refresh_rate_mode(aconnector, false);
                        drm_mode_copy(&saved_mode, &mode);
@@@ -6389,9 -6394,6 +6394,6 @@@ int amdgpu_dm_connector_atomic_set_prop
        } else if (property == adev->mode_info.underscan_property) {
                dm_new_state->underscan_enable = val;
                ret = 0;
-       } else if (property == adev->mode_info.abm_level_property) {
-               dm_new_state->abm_level = val ?: ABM_LEVEL_IMMEDIATE_DISABLE;
-               ret = 0;
        }
  
        return ret;
@@@ -6434,10 -6436,6 +6436,6 @@@ int amdgpu_dm_connector_atomic_get_prop
        } else if (property == adev->mode_info.underscan_property) {
                *val = dm_state->underscan_enable;
                ret = 0;
-       } else if (property == adev->mode_info.abm_level_property) {
-               *val = (dm_state->abm_level != ABM_LEVEL_IMMEDIATE_DISABLE) ?
-                       dm_state->abm_level : 0;
-               ret = 0;
        }
  
        return ret;
@@@ -6656,7 -6654,7 +6654,7 @@@ static void amdgpu_dm_connector_funcs_f
        struct edid *edid;
        struct i2c_adapter *ddc;
  
-       if (dc_link->aux_mode)
+       if (dc_link && dc_link->aux_mode)
                ddc = &aconnector->dm_dp_aux.aux.ddc;
        else
                ddc = &aconnector->i2c->base;
@@@ -7547,7 -7545,7 +7545,7 @@@ static void amdgpu_dm_connector_add_fre
        struct amdgpu_dm_connector *amdgpu_dm_connector =
                to_amdgpu_dm_connector(connector);
  
-       if (!edid)
+       if (!(amdgpu_freesync_vid_mode && edid))
                return;
  
        if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 10)
@@@ -7664,13 -7662,6 +7662,6 @@@ void amdgpu_dm_connector_init_helper(st
        aconnector->base.state->max_bpc = 16;
        aconnector->base.state->max_requested_bpc = aconnector->base.state->max_bpc;
  
-       if (connector_type == DRM_MODE_CONNECTOR_eDP &&
-           (dc_is_dmcu_initialized(adev->dm.dc) ||
-            adev->dm.dc->ctx->dmub_srv) && amdgpu_dm_abm_level < 0) {
-               drm_object_attach_property(&aconnector->base.base,
-                               adev->mode_info.abm_level_property, 0);
-       }
        if (connector_type == DRM_MODE_CONNECTOR_HDMIA) {
                /* Content Type is currently only implemented for HDMI. */
                drm_connector_attach_content_type_property(&aconnector->base);
@@@ -7758,6 -7749,7 +7749,6 @@@ create_i2c(struct ddc_service *ddc_serv
        if (!i2c)
                return NULL;
        i2c->base.owner = THIS_MODULE;
 -      i2c->base.class = I2C_CLASS_DDC;
        i2c->base.dev.parent = &adev->pdev->dev;
        i2c->base.algo = &amdgpu_dm_i2c_algo;
        snprintf(i2c->base.name, sizeof(i2c->base.name), "AMDGPU DM i2c hw bus %d", link_index);
@@@ -9847,7 -9839,8 +9838,8 @@@ static int dm_update_crtc_state(struct 
                 * TODO: Refactor this function to allow this check to work
                 * in all conditions.
                 */
-               if (dm_new_crtc_state->stream &&
+               if (amdgpu_freesync_vid_mode &&
+                   dm_new_crtc_state->stream &&
                    is_timing_unchanged_for_freesync(new_crtc_state, old_crtc_state))
                        goto skip_modeset;
  
                }
  
                /* Now check if we should set freesync video mode */
-               if (dm_new_crtc_state->stream &&
+               if (amdgpu_freesync_vid_mode && dm_new_crtc_state->stream &&
                    dc_is_stream_unchanged(new_stream, dm_old_crtc_state->stream) &&
                    dc_is_stream_scaling_unchanged(new_stream, dm_old_crtc_state->stream) &&
                    is_timing_unchanged_for_freesync(new_crtc_state,
                        set_freesync_fixed_config(dm_new_crtc_state);
  
                        goto skip_modeset;
-               } else if (aconnector &&
+               } else if (amdgpu_freesync_vid_mode && aconnector &&
                           is_freesync_video_mode(&new_crtc_state->mode,
                                                  aconnector)) {
                        struct drm_display_mode *high_mode;
index dd9bcbd630a1f9465285127dd23999f425bcc986,0467864a1aa88c0b8f8d9e6ee881a6d3718e209d..f41ac6465f2a98aa3db98ed5dbe04d126e0d1d74
@@@ -1530,6 -1530,7 +1530,6 @@@ static int aldebaran_i2c_control_init(s
        smu_i2c->port = 0;
        mutex_init(&smu_i2c->mutex);
        control->owner = THIS_MODULE;
 -      control->class = I2C_CLASS_SPD;
        control->dev.parent = &adev->pdev->dev;
        control->algo = &aldebaran_i2c_algo;
        snprintf(control->name, sizeof(control->name), "AMDGPU SMU 0");
@@@ -1682,8 -1683,8 +1682,8 @@@ static int aldebaran_get_current_pcie_l
  
        /* TODO: confirm this on real target */
        esm_ctrl = RREG32_PCIE(smnPCIE_ESM_CTRL);
-       if ((esm_ctrl >> 15) & 0x1FFFF)
-               return (((esm_ctrl >> 8) & 0x3F) + 128);
+       if ((esm_ctrl >> 15) & 0x1)
+               return (((esm_ctrl >> 8) & 0x7F) + 128);
  
        return smu_v13_0_get_current_pcie_link_speed(smu);
  }
@@@ -1746,10 -1747,12 +1746,12 @@@ static ssize_t aldebaran_get_gpu_metric
  
        gpu_metrics->current_fan_speed = 0;
  
-       gpu_metrics->pcie_link_width =
-               smu_v13_0_get_current_pcie_link_width(smu);
-       gpu_metrics->pcie_link_speed =
-               aldebaran_get_current_pcie_link_speed(smu);
+       if (!amdgpu_sriov_vf(smu->adev)) {
+               gpu_metrics->pcie_link_width =
+                       smu_v13_0_get_current_pcie_link_width(smu);
+               gpu_metrics->pcie_link_speed =
+                       aldebaran_get_current_pcie_link_speed(smu);
+       }
  
        gpu_metrics->system_clock_counter = ktime_get_boottime_ns();
  
index a9954ffc02c562b91bf1166bb4bf87208152b36a,215f7c91ca73cb831f49b70701994f4197e5d37a..9b80f18ea6c359f279f050ee9f645b92dd43d057
@@@ -2369,13 -2369,12 +2369,12 @@@ static int smu_v13_0_0_get_power_limit(
        if (default_power_limit)
                *default_power_limit = power_limit;
  
-       if (smu->od_enabled) {
+       if (smu->od_enabled)
                od_percent_upper = le32_to_cpu(powerplay_table->overdrive_table.max[SMU_13_0_0_ODSETTING_POWERPERCENTAGE]);
-               od_percent_lower = le32_to_cpu(powerplay_table->overdrive_table.min[SMU_13_0_0_ODSETTING_POWERPERCENTAGE]);
-       } else {
+       else
                od_percent_upper = 0;
-               od_percent_lower = 100;
-       }
+       od_percent_lower = le32_to_cpu(powerplay_table->overdrive_table.min[SMU_13_0_0_ODSETTING_POWERPERCENTAGE]);
  
        dev_dbg(smu->adev->dev, "od percent upper:%d, od percent lower:%d (default power: %d)\n",
                                        od_percent_upper, od_percent_lower, power_limit);
@@@ -2697,6 -2696,7 +2696,6 @@@ static int smu_v13_0_0_i2c_control_init
                smu_i2c->port = i;
                mutex_init(&smu_i2c->mutex);
                control->owner = THIS_MODULE;
 -              control->class = I2C_CLASS_SPD;
                control->dev.parent = &adev->pdev->dev;
                control->algo = &smu_v13_0_0_i2c_algo;
                snprintf(control->name, sizeof(control->name), "AMDGPU SMU %d", i);
index 45a84fd5dc0448cae08a9dc4a78548d73be7322f,744c84f3029ff99974e10670235bc65bd45d71da..3957af057d54ff1ed8d5f5f9545e51562cb3973c
@@@ -2025,6 -2025,7 +2025,6 @@@ static int smu_v13_0_6_i2c_control_init
                smu_i2c->port = i;
                mutex_init(&smu_i2c->mutex);
                control->owner = THIS_MODULE;
 -              control->class = I2C_CLASS_SPD;
                control->dev.parent = &adev->pdev->dev;
                control->algo = &smu_v13_0_6_i2c_algo;
                snprintf(control->name, sizeof(control->name), "AMDGPU SMU %d", i);
@@@ -2147,8 -2148,8 +2147,8 @@@ static int smu_v13_0_6_get_current_pcie
  
        /* TODO: confirm this on real target */
        esm_ctrl = RREG32_PCIE(smnPCIE_ESM_CTRL);
-       if ((esm_ctrl >> 15) & 0x1FFFF)
-               return (((esm_ctrl >> 8) & 0x3F) + 128);
+       if ((esm_ctrl >> 15) & 0x1)
+               return (((esm_ctrl >> 8) & 0x7F) + 128);
  
        speed_level = (RREG32_PCIE(smnPCIE_LC_SPEED_CNTL) &
                PCIE_LC_SPEED_CNTL__LC_CURRENT_DATA_RATE_MASK)
@@@ -2228,14 -2229,16 +2228,16 @@@ static ssize_t smu_v13_0_6_get_gpu_metr
        gpu_metrics->gfxclk_lock_status = GET_METRIC_FIELD(GfxLockXCDMak) >> GET_INST(GC, 0);
  
        if (!(adev->flags & AMD_IS_APU)) {
-               link_width_level = smu_v13_0_6_get_current_pcie_link_width_level(smu);
-               if (link_width_level > MAX_LINK_WIDTH)
-                       link_width_level = 0;
-               gpu_metrics->pcie_link_width =
-                       DECODE_LANE_WIDTH(link_width_level);
-               gpu_metrics->pcie_link_speed =
-                       smu_v13_0_6_get_current_pcie_link_speed(smu);
+               if (!amdgpu_sriov_vf(adev)) {
+                       link_width_level = smu_v13_0_6_get_current_pcie_link_width_level(smu);
+                       if (link_width_level > MAX_LINK_WIDTH)
+                               link_width_level = 0;
+                       gpu_metrics->pcie_link_width =
+                               DECODE_LANE_WIDTH(link_width_level);
+                       gpu_metrics->pcie_link_speed =
+                               smu_v13_0_6_get_current_pcie_link_speed(smu);
+               }
                gpu_metrics->pcie_bandwidth_acc =
                                SMUQ10_ROUND(metrics_x->PcieBandwidthAcc[0]);
                gpu_metrics->pcie_bandwidth_inst =
@@@ -2306,8 -2309,8 +2308,8 @@@ static int smu_v13_0_6_mode2_reset(stru
        ret = smu_cmn_send_msg_without_waiting(smu, (uint16_t)index,
                                               SMU_RESET_MODE_2);
  
-       /* This is similar to FLR, wait till max FLR timeout */
-       msleep(100);
+       /* Reset takes a bit longer, wait for 200ms. */
+       msleep(200);
  
        dev_dbg(smu->adev->dev, "restore config space...\n");
        /* Restore the config space saved during init */
This page took 0.149674 seconds and 4 git commands to generate.