[PATCH 000/138] The new SW SMU driver of amdgpu

Huang Rui ray.huang at amd.com
Fri Jan 25 10:23:27 UTC 2019


Hi all,

The series of patches are to implement a new SW SMU driver for future asics.

Background:
The powerplay driver will be retired. The final version is for vega20 with
SMU11. However, the future asic will use the new swSMU framework to implement as
well. Here is the first version of new sw smu driver that is basing on vega20.

Purpose: 
We would like to do re-arch for linux power codes to use a new sw SMU ip block
for future asics. We hope to write a simple and readable framework for Linux. 

Currently, the default path is still with powerplay on vega20. So far we don’t
plan to switch default path to new swSMU design for vega20. And we can use the
module parameter amdgpu_dpm to switch it to new SW SMU design (modprobe amdgpu
dpm=1).

Development Items:
- Setup new SMU IP block skeleton.
- Implement SMC firmware loading function.
- Implement SMC table data structure. 
- Implement SMU v11 indirect register (MP1) read/write and SMC message sending
  helpers.
- Implement SMU v11 SMC table initialization (read from vbios, parse, populate,
  and write back to smc).
- Implement SMU v11 memory pool location function.
- Enable DPM feature for SMU v11 and implement DPM control callback function.
- Enable interfaces for starting tools.
- Implement SMU v11 power control and power containment functions.
- Implement and enable SMU v11 thermal/fan control function.
- Implement SMU interfaces placeholder for DC, VCN, and KFD driver. 
- Enable and align sys interface in the amdgpu_pm.c.

So far, Kevin, Likun, Jack, and I have enabled features such as dpm, od,
thermal, and etc. with new sw smu driver. (Thanks to Kevin, Likun and Jack's
great effort!)

Any comments are warm for us.

Thanks & Best Regards!
Ray


Chengming Gui (14):
  drm/amd/powerplay: implement power_dpm_state sys interface for SMU11
  drm/amd/powerplay: add watermarks related data structs and function
    for SMU11.
  drm/amd/powerplay: implement pp_power_profile_mode sys inerface for
    SMU11
  drm/amd/powerplay: add display_config to handle display config for
    SMU11.
  drm/amd/powerplay: add mclk_latency_table struct and smu_clocks struct
    for SMU11
  drm/amd/powerplay: add enable_umd_pstate functions for SMU11
  drm/amd/powerplay: add get_profiling_clk_mask functions for SMU11
  drm/amd/powerplay: add set_uclk_to_highest_level for SMU11
  drm/amd/powerplay: add display_config_changed for SMU11.
  drm/amd/powerplay: add apply_clock_adjust_rules for SMU11.
  drm/amd/powerplay: add vega20_notify_smc_display_config functions for
    SMU11
  drm/amd/powerplay: add vega20_find/force_higest/lowest_dpm for SMU11
  drm/amd/powerplay: add vega20_unforce_dpm_levels for SMU11.
  drm/amd/powerplay: implement power_dpm_force_performance_level for
    SMU11

Huang Rui (53):
  drm/amd/powerplay: add new smu ip block
  drm/amd/powerplay: add smu11 sub block for SMU IP
  drm/amd/powerplay: add firmware loading interface
  drm/amd/powerplay: add fw load checking interface
  drm/amd/powerplay: add interface to read pptable from vbios
  drm/amd/powerplay: add placeholder of smu_initialize_pptable
  drm/amd/powerplay: add interface to init smc tables (v2)
  drm/amd/powerplay: add interface to init power (v2)
  drm/amd/powerplay: add interface to get vbios bootup values (v2)
  drm/amd/powerplay: add interface to check pptable (v2)
  drm/amd/powerplay: add interface to init fb allocations (v2)
  drm/amd/powerplay: add interface to parse pptable (v2)
  drm/amd/powerplay: add interface to populate smc pptable (v2)
  drm/amd/powerplay: add interface to check fw version (v2)
  drm/amd/powerplay: add interface to write pptable (v2)
  drm/amd/powerplay: add interface to set min dcef deep sleep (v2)
  drm/amd/powerplay: add interface to set tool table location (v2)
  drm/amd/powerplay: add interface to allocate memory pool (v2)
  drm/amd/powerplay: add interface to notify memory pool location (v2)
  drm/amd/powerplay: add interfaces for smu resume
  drm/amd/powerplay: add resume sequence placeholder for smu ip block
  drm/amdgpu: enable new smu ip block for vega20
  drm/amd/powerplay: add new ppsmc header for smu11 (v2)
  drm/amd/powerplay: add pptable header for smu11
  drm/amdgpu: update atomfirmware header for smu11
  drm/amdgpu: update new members in atomfirmware
  drm/amd/powerplay: add smu table context structure
  drm/amd/powerplay: add get atom data table helper
  drm/amdgpu: move get_index_into_master_table macro into atomfirmware
    header
  drm/amd/powerplay: implement read_pptable_from_vbios function for
    smu11
  drm/amd/powerplay: update pptable header for smu11
  drm/amd/powerplay: add data structure of bootup values
  drm/amd/powerplay: implement get_vbios_bootup_values function for
    smu11 (v2)
  drm/amd/powerplay: implement get_clk_info_from_vbios function for
    smu11 (v2)
  drm/amd/powerplay: add vega20 pptable function file
  drm/amd/powerplay: add append_powerplay_table function
  drm/amd/powerplay: add get_max_sustainable_clock function
  drm/amd/powerplay: add the function to set deep sleep dcefclk
  drm/amd/powerplay: add two interfaces to set_active_display_count and
    store_cc6_data
  drm/amd/powerplay: add smu display configuration change function
  drm/amd/powerplay: add get_clock_by_type interface for display
  drm/amd/powerplay: add interface to get max high clocks for display
  drm/amd/powerplay: add interface to get clock by type with latency for
    display (v2)
  drm/amd/powerplay: add interface to get clock by type with voltage for
    display
  drm/amd/powerplay: add interface to request display clock voltage
  drm/amd/powerplay: add interface to get dal power level
  drm/amd/powerplay: add interface to get performance level
  drm/amd/powerplay: add interface to get current shallow sleep clocks
  drm/amd/powerplay: add interface to get current clocks for display
  drm/amd/powerplay: add interface to notify smu enable pme restore
    register
  drm/amd/powerplay: implement interface to set watermarks for clock
    ranges
  drm/amd/powerplay: remove unnecessary checking in smu_hw_fini
  drm/amd/powerplay: don't check hwmgr while using the sw smu

Kevin Wang (38):
  drm/amd/powerplay: implement smu send message functions for smu11 (v3)
  drm/amd/powerplay: implement check_fw_status function for smu11
  drm/amd/powerplay: implement check_fw_version function for smu11
  drm/amd/powerplay: implement smu_init[fini]_smc_tables for smu11
  drm/amd/powerplay: implement smu dpm context functions for smu11
  drm/amd/powerplay: implement smu_init[fini]_power function for smu11
  drm/amd/powerplay: implement smu_init(fini)_fb_allocations function
  drm/amd/powerplay: remove header of smu_v11_0_pptable
  drm/amd/powerplay: implement smu_alloc[free]_memory pool function
  drm/amd/powerplay: implement notify_memory_pool_location function for
    smu11
  drm/amd/powerplay: add enum smu_msg_type to header
  drm/amd/powerplay: implement smu vega20_message_map for vega20
  drm/amd/powerplay: use virtual msg index to replace asic-related msg
    index
  drm/amd/powerplay: replace SMU_MSG_XXX with PPSMC_MSG_XXX message
    index for smu11 (v2)
  drm/amd/powerplay: implement smu_init_display for smu11
  drm/amd/powerplay: implement smu_run_afll_btc function
  drm/amd/powerplay: implement smu feature functions
  drm/amd/powerplay: implement feature get&set functions
  drm/amd/powerplay: implement smu_notify_display_change function for
    smu11
  drm/amd/powerplay: implement get_current_clk_freq for smu11
  drm/amd/powerplay: implement smu update table function
  drm/amd/powerplay: implement is_support_sw_smu function for new smu
  drm/amd/powerplay: implement sysfs of amdgpu_get_busy_percent for
    smu11
  drm/amd/powerplay: implement sysfs of pp_table for smu11
  drm/amd/powerplay: implement sensor of SCLK and MCLK for smu11
  drm/amd/powerplay: implement sensor of thermal_get_temperature for
    smu11
  drm/amd/powerplay: implement sensor of get_gpu_power for smu11
  drm/amd/powerplay: implement sensor of get_gfx_vdd for smu11
  drm/amd/powerplay: implement sensor of get feature mask
  drm/amd/powerplay: implement sysfs of get num states function
  drm/amd/powerplay: implement sysfs of pp_cur_state function
  drm/amd/powerplay: implement sysfs of pp_force_state for sw-smu
  drm/amd/powerplay: implement update enabled feature state to smc for
    smu11
  drm/amd/powerplay: hwmon don't check powerplay when sw smu is enabled
  drm/amd/powerplay: implement uvd & vce dpm enable functions
  drm/amd/powerplay: implement sensor of uvd & vce power state for smu11
  drm/amd/powerplay: implement dpm enable functions of uvd & vce for smu
  drm/amd/powerplay: enable amdgpu dpm for smu

Likun Gao (33):
  drm/amd/powerplay: init microcode for smu11
  drm/amd/powerplay: add function to parse pptable for smu11
  drm/amd/powerplay: add function to check pptable for smu11
  drm/amd/powerplay: update hw fini function to relase some memory
  drm/amd/powerplay: add function to populate smc pptable for smu11
  drm/amd/powerplay: add function to write pptable for smu11 (v2)
  drm/amd/powerplay: add function to set min dcef deep sleep for smu11
    (v2)
  drm/amd/powerplay: add function to set tool table location for smu11
    (v2)
  drm/amd/powerplay: expose the function of smu read argument
  drm/amd/powerplay: Change the allocate method of dpm context for
    smu11.
  drm/amd/powerplay: set defalut dpm table for smu
  drm/amd/powerplay: add function to populate umd state clk.
  drm/amd/powerplay: add function to get power limit for smu11 (v2)
  drm/amd/powerplay: print clock levels for smu11 (v2)
  drm/amd/powerplay: add function to get thermal range
  drm/amd/powerplay: add function to set thermal range
  drm/amd/powerplay: add function to enable thermal alert
  drm/amd/powerplay: add function to set fan table to control thermal
  drm/amd/powerplay: add function to start thermal control
  drm/amd/powerplay: upload dpm level for smu11
  drm/amd/powerplay: force clock levels for smu11
  drm/amd/powerplay: add function to store overdrive information for
    smu11
  drm/amd/powerplay: add function to set default overdrive settings
  drm/amd/powerplay: add golden dpm table to backup default DPM table
  drm/amd/powerplay: print overdrive percentage information for smu11
  drm/amd/powerplay: get overdrive clock and voltage information
  drm/amd/powerplay: add sys interface for pcie for smu
  drm/amd/powerplay: add function to update overdrive settings
  drm/amd/powerplay: add sys interface for set sclk_od/mclk_od for smu
  drm/amd/powerplay: add sys interface to set pp_od_clk_voltage for smu
  drm/amd/powerplay: adjust power state when set od_clk
  drm/amd/powerplay: dpm clk can be set only when performance level is
    manual
  drm/amd/powerplay: Unify smu handle task function

 drivers/gpu/drm/amd/amdgpu/amdgpu.h                |    4 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c   |   12 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h   |    2 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c        |    7 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h            |   11 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c             |  364 ++--
 drivers/gpu/drm/amd/amdgpu/soc15.c                 |    9 +-
 .../drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c   |   99 +-
 drivers/gpu/drm/amd/include/amd_shared.h           |    3 +
 drivers/gpu/drm/amd/include/atomfirmware.h         |   44 +-
 drivers/gpu/drm/amd/powerplay/Makefile             |    2 +-
 drivers/gpu/drm/amd/powerplay/amdgpu_smu.c         | 1198 +++++++++++
 drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h     |  732 +++++++
 drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h      |   89 +
 .../gpu/drm/amd/powerplay/inc/smu_v11_0_ppsmc.h    |  128 ++
 .../gpu/drm/amd/powerplay/inc/smu_v11_0_pptable.h  |  147 ++
 drivers/gpu/drm/amd/powerplay/smu_v11_0.c          | 1683 +++++++++++++++
 drivers/gpu/drm/amd/powerplay/vega20_ppt.c         | 2146 ++++++++++++++++++++
 drivers/gpu/drm/amd/powerplay/vega20_ppt.h         |  129 ++
 19 files changed, 6624 insertions(+), 185 deletions(-)
 create mode 100644 drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
 create mode 100644 drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
 create mode 100644 drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h
 create mode 100644 drivers/gpu/drm/amd/powerplay/inc/smu_v11_0_ppsmc.h
 create mode 100644 drivers/gpu/drm/amd/powerplay/inc/smu_v11_0_pptable.h
 create mode 100644 drivers/gpu/drm/amd/powerplay/smu_v11_0.c
 create mode 100644 drivers/gpu/drm/amd/powerplay/vega20_ppt.c
 create mode 100644 drivers/gpu/drm/amd/powerplay/vega20_ppt.h

-- 
2.7.4



More information about the amd-gfx mailing list