lkml.org 
[lkml]   [2014]   [Mar]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.13 103/149] drm/radeon: re-order firmware loading in preparation for dpm rework
    Date
    3.13-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Alex Deucher <alexander.deucher@amd.com>

    commit 01ac8794a77192236a4b91c33adf4177ac5a21f0 upstream.

    We need to reorder the driver init sequence to better accomodate
    dpm which needs to be loaded earlier in the init sequence. Move
    fw init up so that it's available for dpm init.

    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/gpu/drm/radeon/cik.c | 42 +++++++++++++++++++------------------
    drivers/gpu/drm/radeon/evergreen.c | 33 +++++++++++++++--------------
    drivers/gpu/drm/radeon/ni.c | 36 ++++++++++++++++---------------
    drivers/gpu/drm/radeon/r600.c | 16 +++++++-------
    drivers/gpu/drm/radeon/rv770.c | 16 +++++++-------
    drivers/gpu/drm/radeon/si.c | 18 +++++++--------
    6 files changed, 84 insertions(+), 77 deletions(-)

    --- a/drivers/gpu/drm/radeon/cik.c
    +++ b/drivers/gpu/drm/radeon/cik.c
    @@ -7498,26 +7498,7 @@ static int cik_startup(struct radeon_dev

    cik_mc_program(rdev);

    - if (rdev->flags & RADEON_IS_IGP) {
    - if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
    - !rdev->mec_fw || !rdev->sdma_fw || !rdev->rlc_fw) {
    - r = cik_init_microcode(rdev);
    - if (r) {
    - DRM_ERROR("Failed to load firmware!\n");
    - return r;
    - }
    - }
    - } else {
    - if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
    - !rdev->mec_fw || !rdev->sdma_fw || !rdev->rlc_fw ||
    - !rdev->mc_fw) {
    - r = cik_init_microcode(rdev);
    - if (r) {
    - DRM_ERROR("Failed to load firmware!\n");
    - return r;
    - }
    - }
    -
    + if (!(rdev->flags & RADEON_IS_IGP)) {
    r = ci_mc_load_microcode(rdev);
    if (r) {
    DRM_ERROR("Failed to load MC firmware!\n");
    @@ -7830,6 +7811,27 @@ int cik_init(struct radeon_device *rdev)
    if (r)
    return r;

    + if (rdev->flags & RADEON_IS_IGP) {
    + if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
    + !rdev->mec_fw || !rdev->sdma_fw || !rdev->rlc_fw) {
    + r = cik_init_microcode(rdev);
    + if (r) {
    + DRM_ERROR("Failed to load firmware!\n");
    + return r;
    + }
    + }
    + } else {
    + if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
    + !rdev->mec_fw || !rdev->sdma_fw || !rdev->rlc_fw ||
    + !rdev->mc_fw) {
    + r = cik_init_microcode(rdev);
    + if (r) {
    + DRM_ERROR("Failed to load firmware!\n");
    + return r;
    + }
    + }
    + }
    +
    ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
    ring->ring_obj = NULL;
    r600_ring_init(rdev, ring, 1024 * 1024);
    --- a/drivers/gpu/drm/radeon/evergreen.c
    +++ b/drivers/gpu/drm/radeon/evergreen.c
    @@ -5110,26 +5110,11 @@ static int evergreen_startup(struct rade
    evergreen_mc_program(rdev);

    if (ASIC_IS_DCE5(rdev)) {
    - if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) {
    - r = ni_init_microcode(rdev);
    - if (r) {
    - DRM_ERROR("Failed to load firmware!\n");
    - return r;
    - }
    - }
    r = ni_mc_load_microcode(rdev);
    if (r) {
    DRM_ERROR("Failed to load MC firmware!\n");
    return r;
    }
    - } else {
    - if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
    - r = r600_init_microcode(rdev);
    - if (r) {
    - DRM_ERROR("Failed to load firmware!\n");
    - return r;
    - }
    - }
    }

    if (rdev->flags & RADEON_IS_AGP) {
    @@ -5357,6 +5342,24 @@ int evergreen_init(struct radeon_device
    if (r)
    return r;

    + if (ASIC_IS_DCE5(rdev)) {
    + if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) {
    + r = ni_init_microcode(rdev);
    + if (r) {
    + DRM_ERROR("Failed to load firmware!\n");
    + return r;
    + }
    + }
    + } else {
    + if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
    + r = r600_init_microcode(rdev);
    + if (r) {
    + DRM_ERROR("Failed to load firmware!\n");
    + return r;
    + }
    + }
    + }
    +
    rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
    r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);

    --- a/drivers/gpu/drm/radeon/ni.c
    +++ b/drivers/gpu/drm/radeon/ni.c
    @@ -1876,23 +1876,7 @@ static int cayman_startup(struct radeon_

    evergreen_mc_program(rdev);

    - if (rdev->flags & RADEON_IS_IGP) {
    - if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
    - r = ni_init_microcode(rdev);
    - if (r) {
    - DRM_ERROR("Failed to load firmware!\n");
    - return r;
    - }
    - }
    - } else {
    - if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) {
    - r = ni_init_microcode(rdev);
    - if (r) {
    - DRM_ERROR("Failed to load firmware!\n");
    - return r;
    - }
    - }
    -
    + if (!(rdev->flags & RADEON_IS_IGP)) {
    r = ni_mc_load_microcode(rdev);
    if (r) {
    DRM_ERROR("Failed to load MC firmware!\n");
    @@ -2143,6 +2127,24 @@ int cayman_init(struct radeon_device *rd
    if (r)
    return r;

    + if (rdev->flags & RADEON_IS_IGP) {
    + if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
    + r = ni_init_microcode(rdev);
    + if (r) {
    + DRM_ERROR("Failed to load firmware!\n");
    + return r;
    + }
    + }
    + } else {
    + if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) {
    + r = ni_init_microcode(rdev);
    + if (r) {
    + DRM_ERROR("Failed to load firmware!\n");
    + return r;
    + }
    + }
    + }
    +
    ring->ring_obj = NULL;
    r600_ring_init(rdev, ring, 1024 * 1024);

    --- a/drivers/gpu/drm/radeon/r600.c
    +++ b/drivers/gpu/drm/radeon/r600.c
    @@ -2776,14 +2776,6 @@ static int r600_startup(struct radeon_de

    r600_mc_program(rdev);

    - if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
    - r = r600_init_microcode(rdev);
    - if (r) {
    - DRM_ERROR("Failed to load firmware!\n");
    - return r;
    - }
    - }
    -
    if (rdev->flags & RADEON_IS_AGP) {
    r600_agp_enable(rdev);
    } else {
    @@ -2971,6 +2963,14 @@ int r600_init(struct radeon_device *rdev
    if (r)
    return r;

    + if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
    + r = r600_init_microcode(rdev);
    + if (r) {
    + DRM_ERROR("Failed to load firmware!\n");
    + return r;
    + }
    + }
    +
    rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
    r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);

    --- a/drivers/gpu/drm/radeon/rv770.c
    +++ b/drivers/gpu/drm/radeon/rv770.c
    @@ -1665,14 +1665,6 @@ static int rv770_startup(struct radeon_d

    rv770_mc_program(rdev);

    - if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
    - r = r600_init_microcode(rdev);
    - if (r) {
    - DRM_ERROR("Failed to load firmware!\n");
    - return r;
    - }
    - }
    -
    if (rdev->flags & RADEON_IS_AGP) {
    rv770_agp_enable(rdev);
    } else {
    @@ -1876,6 +1868,14 @@ int rv770_init(struct radeon_device *rde
    if (r)
    return r;

    + if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
    + r = r600_init_microcode(rdev);
    + if (r) {
    + DRM_ERROR("Failed to load firmware!\n");
    + return r;
    + }
    + }
    +
    rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
    r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);

    --- a/drivers/gpu/drm/radeon/si.c
    +++ b/drivers/gpu/drm/radeon/si.c
    @@ -6328,15 +6328,6 @@ static int si_startup(struct radeon_devi

    si_mc_program(rdev);

    - if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
    - !rdev->rlc_fw || !rdev->mc_fw) {
    - r = si_init_microcode(rdev);
    - if (r) {
    - DRM_ERROR("Failed to load firmware!\n");
    - return r;
    - }
    - }
    -
    r = si_mc_load_microcode(rdev);
    if (r) {
    DRM_ERROR("Failed to load MC firmware!\n");
    @@ -6604,6 +6595,15 @@ int si_init(struct radeon_device *rdev)
    if (r)
    return r;

    + if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
    + !rdev->rlc_fw || !rdev->mc_fw) {
    + r = si_init_microcode(rdev);
    + if (r) {
    + DRM_ERROR("Failed to load firmware!\n");
    + return r;
    + }
    + }
    +
    ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
    ring->ring_obj = NULL;
    r600_ring_init(rdev, ring, 1024 * 1024);



    \
     
     \ /
      Last update: 2014-03-21 07:41    [W:4.039 / U:0.400 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site