|
112 | 112 | #define mmCP_HYP_ME_UCODE_DATA 0x5817 |
113 | 113 | #define mmCP_HYP_ME_UCODE_DATA_BASE_IDX 1 |
114 | 114 |
|
| 115 | +//CC_GC_SA_UNIT_DISABLE |
| 116 | +#define mmCC_GC_SA_UNIT_DISABLE 0x0fe9 |
| 117 | +#define mmCC_GC_SA_UNIT_DISABLE_BASE_IDX 0 |
| 118 | +#define CC_GC_SA_UNIT_DISABLE__SA_DISABLE__SHIFT 0x8 |
| 119 | +#define CC_GC_SA_UNIT_DISABLE__SA_DISABLE_MASK 0x0000FF00L |
| 120 | +//GC_USER_SA_UNIT_DISABLE |
| 121 | +#define mmGC_USER_SA_UNIT_DISABLE 0x0fea |
| 122 | +#define mmGC_USER_SA_UNIT_DISABLE_BASE_IDX 0 |
| 123 | +#define GC_USER_SA_UNIT_DISABLE__SA_DISABLE__SHIFT 0x8 |
| 124 | +#define GC_USER_SA_UNIT_DISABLE__SA_DISABLE_MASK 0x0000FF00L |
| 125 | +//PA_SC_ENHANCE_3 |
| 126 | +#define mmPA_SC_ENHANCE_3 0x1085 |
| 127 | +#define mmPA_SC_ENHANCE_3_BASE_IDX 0 |
| 128 | +#define PA_SC_ENHANCE_3__FORCE_PBB_WORKLOAD_MODE_TO_ZERO__SHIFT 0x3 |
| 129 | +#define PA_SC_ENHANCE_3__FORCE_PBB_WORKLOAD_MODE_TO_ZERO_MASK 0x00000008L |
| 130 | + |
115 | 131 | MODULE_FIRMWARE("amdgpu/navi10_ce.bin"); |
116 | 132 | MODULE_FIRMWARE("amdgpu/navi10_pfp.bin"); |
117 | 133 | MODULE_FIRMWARE("amdgpu/navi10_me.bin"); |
@@ -3189,6 +3205,8 @@ static int gfx_v10_0_wait_for_rlc_autoload_complete(struct amdgpu_device *adev); |
3189 | 3205 | static void gfx_v10_0_ring_emit_ce_meta(struct amdgpu_ring *ring, bool resume); |
3190 | 3206 | static void gfx_v10_0_ring_emit_de_meta(struct amdgpu_ring *ring, bool resume); |
3191 | 3207 | static void gfx_v10_0_ring_emit_frame_cntl(struct amdgpu_ring *ring, bool start, bool secure); |
| 3208 | +static u32 gfx_v10_3_get_disabled_sa(struct amdgpu_device *adev); |
| 3209 | +static void gfx_v10_3_program_pbb_mode(struct amdgpu_device *adev); |
3192 | 3210 |
|
3193 | 3211 | static void gfx10_kiq_set_resources(struct amdgpu_ring *kiq_ring, uint64_t queue_mask) |
3194 | 3212 | { |
@@ -6929,6 +6947,9 @@ static int gfx_v10_0_hw_init(void *handle) |
6929 | 6947 | if (r) |
6930 | 6948 | return r; |
6931 | 6949 |
|
| 6950 | + if (adev->asic_type == CHIP_SIENNA_CICHLID) |
| 6951 | + gfx_v10_3_program_pbb_mode(adev); |
| 6952 | + |
6932 | 6953 | return r; |
6933 | 6954 | } |
6934 | 6955 |
|
@@ -8774,6 +8795,47 @@ static int gfx_v10_0_get_cu_info(struct amdgpu_device *adev, |
8774 | 8795 | return 0; |
8775 | 8796 | } |
8776 | 8797 |
|
| 8798 | +static u32 gfx_v10_3_get_disabled_sa(struct amdgpu_device *adev) |
| 8799 | +{ |
| 8800 | + uint32_t efuse_setting, vbios_setting, disabled_sa, max_sa_mask; |
| 8801 | + |
| 8802 | + efuse_setting = RREG32_SOC15(GC, 0, mmCC_GC_SA_UNIT_DISABLE); |
| 8803 | + efuse_setting &= CC_GC_SA_UNIT_DISABLE__SA_DISABLE_MASK; |
| 8804 | + efuse_setting >>= CC_GC_SA_UNIT_DISABLE__SA_DISABLE__SHIFT; |
| 8805 | + |
| 8806 | + vbios_setting = RREG32_SOC15(GC, 0, mmGC_USER_SA_UNIT_DISABLE); |
| 8807 | + vbios_setting &= GC_USER_SA_UNIT_DISABLE__SA_DISABLE_MASK; |
| 8808 | + vbios_setting >>= GC_USER_SA_UNIT_DISABLE__SA_DISABLE__SHIFT; |
| 8809 | + |
| 8810 | + max_sa_mask = amdgpu_gfx_create_bitmask(adev->gfx.config.max_sh_per_se * |
| 8811 | + adev->gfx.config.max_shader_engines); |
| 8812 | + disabled_sa = efuse_setting | vbios_setting; |
| 8813 | + disabled_sa &= max_sa_mask; |
| 8814 | + |
| 8815 | + return disabled_sa; |
| 8816 | +} |
| 8817 | + |
| 8818 | +static void gfx_v10_3_program_pbb_mode(struct amdgpu_device *adev) |
| 8819 | +{ |
| 8820 | + uint32_t max_sa_per_se, max_sa_per_se_mask, max_shader_engines; |
| 8821 | + uint32_t disabled_sa_mask, se_index, disabled_sa_per_se; |
| 8822 | + |
| 8823 | + disabled_sa_mask = gfx_v10_3_get_disabled_sa(adev); |
| 8824 | + |
| 8825 | + max_sa_per_se = adev->gfx.config.max_sh_per_se; |
| 8826 | + max_sa_per_se_mask = (1 << max_sa_per_se) - 1; |
| 8827 | + max_shader_engines = adev->gfx.config.max_shader_engines; |
| 8828 | + |
| 8829 | + for (se_index = 0; max_shader_engines > se_index; se_index++) { |
| 8830 | + disabled_sa_per_se = disabled_sa_mask >> (se_index * max_sa_per_se); |
| 8831 | + disabled_sa_per_se &= max_sa_per_se_mask; |
| 8832 | + if (disabled_sa_per_se == max_sa_per_se_mask) { |
| 8833 | + WREG32_FIELD15(GC, 0, PA_SC_ENHANCE_3, FORCE_PBB_WORKLOAD_MODE_TO_ZERO, 1); |
| 8834 | + break; |
| 8835 | + } |
| 8836 | + } |
| 8837 | +} |
| 8838 | + |
8777 | 8839 | const struct amdgpu_ip_block_version gfx_v10_0_ip_block = |
8778 | 8840 | { |
8779 | 8841 | .type = AMD_IP_BLOCK_TYPE_GFX, |
|
0 commit comments