diff mbox

drm/radeon: use radeon device for request firmware

Message ID 1373572381-22515-1-git-send-email-j.glisse@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jerome Glisse July 11, 2013, 7:53 p.m. UTC
From: Jerome Glisse <jglisse@redhat.com>

Avoid creating temporary platform device that will lead to issue
when several radeon gpu are in same computer. Instead directly use
the radeon device for requesting firmware.

Signed-off-by: Jerome Glisse <jglisse@redhat.com>
---
 drivers/gpu/drm/radeon/cik.c        | 25 +++++++------------------
 drivers/gpu/drm/radeon/ni.c         | 21 +++++----------------
 drivers/gpu/drm/radeon/r100.c       | 11 +----------
 drivers/gpu/drm/radeon/r600.c       | 19 ++++---------------
 drivers/gpu/drm/radeon/radeon_uvd.c | 13 +------------
 drivers/gpu/drm/radeon/si.c         | 23 ++++++-----------------
 6 files changed, 24 insertions(+), 88 deletions(-)

Comments

Christian König July 12, 2013, 6:55 a.m. UTC | #1
Am 11.07.2013 21:53, schrieb j.glisse@gmail.com:
> From: Jerome Glisse <jglisse@redhat.com>
>
> Avoid creating temporary platform device that will lead to issue
> when several radeon gpu are in same computer. Instead directly use
> the radeon device for requesting firmware.
>
> Signed-off-by: Jerome Glisse <jglisse@redhat.com>

Thanks, also had that on my todo list since I wrote the UVD code.

Patchset is: Reviewed-by: Christian König <christian.koenig@amd.com>

> ---
>   drivers/gpu/drm/radeon/cik.c        | 25 +++++++------------------
>   drivers/gpu/drm/radeon/ni.c         | 21 +++++----------------
>   drivers/gpu/drm/radeon/r100.c       | 11 +----------
>   drivers/gpu/drm/radeon/r600.c       | 19 ++++---------------
>   drivers/gpu/drm/radeon/radeon_uvd.c | 13 +------------
>   drivers/gpu/drm/radeon/si.c         | 23 ++++++-----------------
>   6 files changed, 24 insertions(+), 88 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
> index db507a4..b893165 100644
> --- a/drivers/gpu/drm/radeon/cik.c
> +++ b/drivers/gpu/drm/radeon/cik.c
> @@ -22,7 +22,6 @@
>    * Authors: Alex Deucher
>    */
>   #include <linux/firmware.h>
> -#include <linux/platform_device.h>
>   #include <linux/slab.h>
>   #include <linux/module.h>
>   #include "drmP.h"
> @@ -742,7 +741,6 @@ static int ci_mc_load_microcode(struct radeon_device *rdev)
>    */
>   static int cik_init_microcode(struct radeon_device *rdev)
>   {
> -	struct platform_device *pdev;
>   	const char *chip_name;
>   	size_t pfp_req_size, me_req_size, ce_req_size,
>   		mec_req_size, rlc_req_size, mc_req_size,
> @@ -752,13 +750,6 @@ static int cik_init_microcode(struct radeon_device *rdev)
>   
>   	DRM_DEBUG("\n");
>   
> -	pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
> -	err = IS_ERR(pdev);
> -	if (err) {
> -		printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
> -		return -EINVAL;
> -	}
> -
>   	switch (rdev->family) {
>   	case CHIP_BONAIRE:
>   		chip_name = "BONAIRE";
> @@ -794,7 +785,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
>   	DRM_INFO("Loading %s Microcode\n", chip_name);
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
> -	err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->pfp_fw->size != pfp_req_size) {
> @@ -806,7 +797,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
> -	err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->me_fw->size != me_req_size) {
> @@ -817,7 +808,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name);
> -	err = request_firmware(&rdev->ce_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->ce_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->ce_fw->size != ce_req_size) {
> @@ -828,7 +819,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec.bin", chip_name);
> -	err = request_firmware(&rdev->mec_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->mec_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->mec_fw->size != mec_req_size) {
> @@ -839,7 +830,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", chip_name);
> -	err = request_firmware(&rdev->rlc_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->rlc_fw->size != rlc_req_size) {
> @@ -850,7 +841,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_sdma.bin", chip_name);
> -	err = request_firmware(&rdev->sdma_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->sdma_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->sdma_fw->size != sdma_req_size) {
> @@ -863,7 +854,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
>   	/* No MC ucode on APUs */
>   	if (!(rdev->flags & RADEON_IS_IGP)) {
>   		snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
> -		err = request_firmware(&rdev->mc_fw, fw_name, &pdev->dev);
> +		err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
>   		if (err)
>   			goto out;
>   		if (rdev->mc_fw->size != mc_req_size) {
> @@ -875,8 +866,6 @@ static int cik_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   out:
> -	platform_device_unregister(pdev);
> -
>   	if (err) {
>   		if (err != -EINVAL)
>   			printk(KERN_ERR
> diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
> index f30127c..465b17e 100644
> --- a/drivers/gpu/drm/radeon/ni.c
> +++ b/drivers/gpu/drm/radeon/ni.c
> @@ -22,7 +22,6 @@
>    * Authors: Alex Deucher
>    */
>   #include <linux/firmware.h>
> -#include <linux/platform_device.h>
>   #include <linux/slab.h>
>   #include <linux/module.h>
>   #include <drm/drmP.h>
> @@ -684,7 +683,6 @@ int ni_mc_load_microcode(struct radeon_device *rdev)
>   
>   int ni_init_microcode(struct radeon_device *rdev)
>   {
> -	struct platform_device *pdev;
>   	const char *chip_name;
>   	const char *rlc_chip_name;
>   	size_t pfp_req_size, me_req_size, rlc_req_size, mc_req_size;
> @@ -694,13 +692,6 @@ int ni_init_microcode(struct radeon_device *rdev)
>   
>   	DRM_DEBUG("\n");
>   
> -	pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
> -	err = IS_ERR(pdev);
> -	if (err) {
> -		printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
> -		return -EINVAL;
> -	}
> -
>   	switch (rdev->family) {
>   	case CHIP_BARTS:
>   		chip_name = "BARTS";
> @@ -753,7 +744,7 @@ int ni_init_microcode(struct radeon_device *rdev)
>   	DRM_INFO("Loading %s Microcode\n", chip_name);
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
> -	err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->pfp_fw->size != pfp_req_size) {
> @@ -765,7 +756,7 @@ int ni_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
> -	err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->me_fw->size != me_req_size) {
> @@ -776,7 +767,7 @@ int ni_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", rlc_chip_name);
> -	err = request_firmware(&rdev->rlc_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->rlc_fw->size != rlc_req_size) {
> @@ -789,7 +780,7 @@ int ni_init_microcode(struct radeon_device *rdev)
>   	/* no MC ucode on TN */
>   	if (!(rdev->flags & RADEON_IS_IGP)) {
>   		snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
> -		err = request_firmware(&rdev->mc_fw, fw_name, &pdev->dev);
> +		err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
>   		if (err)
>   			goto out;
>   		if (rdev->mc_fw->size != mc_req_size) {
> @@ -802,7 +793,7 @@ int ni_init_microcode(struct radeon_device *rdev)
>   
>   	if ((rdev->family >= CHIP_BARTS) && (rdev->family <= CHIP_CAYMAN)) {
>   		snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name);
> -		err = request_firmware(&rdev->smc_fw, fw_name, &pdev->dev);
> +		err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
>   		if (err)
>   			goto out;
>   		if (rdev->smc_fw->size != smc_req_size) {
> @@ -814,8 +805,6 @@ int ni_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   out:
> -	platform_device_unregister(pdev);
> -
>   	if (err) {
>   		if (err != -EINVAL)
>   			printk(KERN_ERR
> diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
> index d0314ec..d5a4541 100644
> --- a/drivers/gpu/drm/radeon/r100.c
> +++ b/drivers/gpu/drm/radeon/r100.c
> @@ -39,7 +39,6 @@
>   #include "atom.h"
>   
>   #include <linux/firmware.h>
> -#include <linux/platform_device.h>
>   #include <linux/module.h>
>   
>   #include "r100_reg_safe.h"
> @@ -989,18 +988,11 @@ void r100_ring_start(struct radeon_device *rdev, struct radeon_ring *ring)
>   /* Load the microcode for the CP */
>   static int r100_cp_init_microcode(struct radeon_device *rdev)
>   {
> -	struct platform_device *pdev;
>   	const char *fw_name = NULL;
>   	int err;
>   
>   	DRM_DEBUG_KMS("\n");
>   
> -	pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
> -	err = IS_ERR(pdev);
> -	if (err) {
> -		printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
> -		return -EINVAL;
> -	}
>   	if ((rdev->family == CHIP_R100) || (rdev->family == CHIP_RV100) ||
>   	    (rdev->family == CHIP_RV200) || (rdev->family == CHIP_RS100) ||
>   	    (rdev->family == CHIP_RS200)) {
> @@ -1042,8 +1034,7 @@ static int r100_cp_init_microcode(struct radeon_device *rdev)
>   		fw_name = FIRMWARE_R520;
>   	}
>   
> -	err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
> -	platform_device_unregister(pdev);
> +	err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
>   	if (err) {
>   		printk(KERN_ERR "radeon_cp: Failed to load firmware \"%s\"\n",
>   		       fw_name);
> diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
> index dcac7fd..05a30ba 100644
> --- a/drivers/gpu/drm/radeon/r600.c
> +++ b/drivers/gpu/drm/radeon/r600.c
> @@ -28,7 +28,6 @@
>   #include <linux/slab.h>
>   #include <linux/seq_file.h>
>   #include <linux/firmware.h>
> -#include <linux/platform_device.h>
>   #include <linux/module.h>
>   #include <drm/drmP.h>
>   #include <drm/radeon_drm.h>
> @@ -2144,7 +2143,6 @@ void r600_cp_stop(struct radeon_device *rdev)
>   
>   int r600_init_microcode(struct radeon_device *rdev)
>   {
> -	struct platform_device *pdev;
>   	const char *chip_name;
>   	const char *rlc_chip_name;
>   	const char *smc_chip_name = "RV770";
> @@ -2154,13 +2152,6 @@ int r600_init_microcode(struct radeon_device *rdev)
>   
>   	DRM_DEBUG("\n");
>   
> -	pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
> -	err = IS_ERR(pdev);
> -	if (err) {
> -		printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
> -		return -EINVAL;
> -	}
> -
>   	switch (rdev->family) {
>   	case CHIP_R600:
>   		chip_name = "R600";
> @@ -2272,7 +2263,7 @@ int r600_init_microcode(struct radeon_device *rdev)
>   	DRM_INFO("Loading %s Microcode\n", chip_name);
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
> -	err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->pfp_fw->size != pfp_req_size) {
> @@ -2284,7 +2275,7 @@ int r600_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
> -	err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->me_fw->size != me_req_size) {
> @@ -2295,7 +2286,7 @@ int r600_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", rlc_chip_name);
> -	err = request_firmware(&rdev->rlc_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->rlc_fw->size != rlc_req_size) {
> @@ -2307,7 +2298,7 @@ int r600_init_microcode(struct radeon_device *rdev)
>   
>   	if ((rdev->family >= CHIP_RV770) && (rdev->family <= CHIP_HEMLOCK)) {
>   		snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", smc_chip_name);
> -		err = request_firmware(&rdev->smc_fw, fw_name, &pdev->dev);
> +		err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
>   		if (err)
>   			goto out;
>   		if (rdev->smc_fw->size != smc_req_size) {
> @@ -2319,8 +2310,6 @@ int r600_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   out:
> -	platform_device_unregister(pdev);
> -
>   	if (err) {
>   		if (err != -EINVAL)
>   			printk(KERN_ERR
> diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c
> index ce5a10c..a7690d2 100644
> --- a/drivers/gpu/drm/radeon/radeon_uvd.c
> +++ b/drivers/gpu/drm/radeon/radeon_uvd.c
> @@ -56,20 +56,12 @@ static void radeon_uvd_idle_work_handler(struct work_struct *work);
>   
>   int radeon_uvd_init(struct radeon_device *rdev)
>   {
> -	struct platform_device *pdev;
>   	unsigned long bo_size;
>   	const char *fw_name;
>   	int i, r;
>   
>   	INIT_DELAYED_WORK(&rdev->uvd.idle_work, radeon_uvd_idle_work_handler);
>   
> -	pdev = platform_device_register_simple("radeon_uvd", 0, NULL, 0);
> -	r = IS_ERR(pdev);
> -	if (r) {
> -		dev_err(rdev->dev, "radeon_uvd: Failed to register firmware\n");
> -		return -EINVAL;
> -	}
> -
>   	switch (rdev->family) {
>   	case CHIP_RV710:
>   	case CHIP_RV730:
> @@ -112,16 +104,13 @@ int radeon_uvd_init(struct radeon_device *rdev)
>   		return -EINVAL;
>   	}
>   
> -	r = request_firmware(&rdev->uvd_fw, fw_name, &pdev->dev);
> +	r = request_firmware(&rdev->uvd_fw, fw_name, rdev->dev);
>   	if (r) {
>   		dev_err(rdev->dev, "radeon_uvd: Can't load firmware \"%s\"\n",
>   			fw_name);
> -		platform_device_unregister(pdev);
>   		return r;
>   	}
>   
> -	platform_device_unregister(pdev);
> -
>   	bo_size = RADEON_GPU_PAGE_ALIGN(rdev->uvd_fw->size + 8) +
>   		  RADEON_UVD_STACK_SIZE + RADEON_UVD_HEAP_SIZE;
>   	r = radeon_bo_create(rdev, bo_size, PAGE_SIZE, true,
> diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
> index 99160d8..5988eeb 100644
> --- a/drivers/gpu/drm/radeon/si.c
> +++ b/drivers/gpu/drm/radeon/si.c
> @@ -22,7 +22,6 @@
>    * Authors: Alex Deucher
>    */
>   #include <linux/firmware.h>
> -#include <linux/platform_device.h>
>   #include <linux/slab.h>
>   #include <linux/module.h>
>   #include <drm/drmP.h>
> @@ -1541,7 +1540,6 @@ static int si_mc_load_microcode(struct radeon_device *rdev)
>   
>   static int si_init_microcode(struct radeon_device *rdev)
>   {
> -	struct platform_device *pdev;
>   	const char *chip_name;
>   	const char *rlc_chip_name;
>   	size_t pfp_req_size, me_req_size, ce_req_size, rlc_req_size, mc_req_size;
> @@ -1551,13 +1549,6 @@ static int si_init_microcode(struct radeon_device *rdev)
>   
>   	DRM_DEBUG("\n");
>   
> -	pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
> -	err = IS_ERR(pdev);
> -	if (err) {
> -		printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
> -		return -EINVAL;
> -	}
> -
>   	switch (rdev->family) {
>   	case CHIP_TAHITI:
>   		chip_name = "TAHITI";
> @@ -1615,7 +1606,7 @@ static int si_init_microcode(struct radeon_device *rdev)
>   	DRM_INFO("Loading %s Microcode\n", chip_name);
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
> -	err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->pfp_fw->size != pfp_req_size) {
> @@ -1627,7 +1618,7 @@ static int si_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
> -	err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->me_fw->size != me_req_size) {
> @@ -1638,7 +1629,7 @@ static int si_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name);
> -	err = request_firmware(&rdev->ce_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->ce_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->ce_fw->size != ce_req_size) {
> @@ -1649,7 +1640,7 @@ static int si_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", rlc_chip_name);
> -	err = request_firmware(&rdev->rlc_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->rlc_fw->size != rlc_req_size) {
> @@ -1660,7 +1651,7 @@ static int si_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
> -	err = request_firmware(&rdev->mc_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->mc_fw->size != mc_req_size) {
> @@ -1671,7 +1662,7 @@ static int si_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name);
> -	err = request_firmware(&rdev->smc_fw, fw_name, &pdev->dev);
> +	err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
>   	if (err)
>   		goto out;
>   	if (rdev->smc_fw->size != smc_req_size) {
> @@ -1682,8 +1673,6 @@ static int si_init_microcode(struct radeon_device *rdev)
>   	}
>   
>   out:
> -	platform_device_unregister(pdev);
> -
>   	if (err) {
>   		if (err != -EINVAL)
>   			printk(KERN_ERR
diff mbox

Patch

diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
index db507a4..b893165 100644
--- a/drivers/gpu/drm/radeon/cik.c
+++ b/drivers/gpu/drm/radeon/cik.c
@@ -22,7 +22,6 @@ 
  * Authors: Alex Deucher
  */
 #include <linux/firmware.h>
-#include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/module.h>
 #include "drmP.h"
@@ -742,7 +741,6 @@  static int ci_mc_load_microcode(struct radeon_device *rdev)
  */
 static int cik_init_microcode(struct radeon_device *rdev)
 {
-	struct platform_device *pdev;
 	const char *chip_name;
 	size_t pfp_req_size, me_req_size, ce_req_size,
 		mec_req_size, rlc_req_size, mc_req_size,
@@ -752,13 +750,6 @@  static int cik_init_microcode(struct radeon_device *rdev)
 
 	DRM_DEBUG("\n");
 
-	pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
-	err = IS_ERR(pdev);
-	if (err) {
-		printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
-		return -EINVAL;
-	}
-
 	switch (rdev->family) {
 	case CHIP_BONAIRE:
 		chip_name = "BONAIRE";
@@ -794,7 +785,7 @@  static int cik_init_microcode(struct radeon_device *rdev)
 	DRM_INFO("Loading %s Microcode\n", chip_name);
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
-	err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->pfp_fw->size != pfp_req_size) {
@@ -806,7 +797,7 @@  static int cik_init_microcode(struct radeon_device *rdev)
 	}
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
-	err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->me_fw->size != me_req_size) {
@@ -817,7 +808,7 @@  static int cik_init_microcode(struct radeon_device *rdev)
 	}
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name);
-	err = request_firmware(&rdev->ce_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->ce_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->ce_fw->size != ce_req_size) {
@@ -828,7 +819,7 @@  static int cik_init_microcode(struct radeon_device *rdev)
 	}
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec.bin", chip_name);
-	err = request_firmware(&rdev->mec_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->mec_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->mec_fw->size != mec_req_size) {
@@ -839,7 +830,7 @@  static int cik_init_microcode(struct radeon_device *rdev)
 	}
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", chip_name);
-	err = request_firmware(&rdev->rlc_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->rlc_fw->size != rlc_req_size) {
@@ -850,7 +841,7 @@  static int cik_init_microcode(struct radeon_device *rdev)
 	}
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_sdma.bin", chip_name);
-	err = request_firmware(&rdev->sdma_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->sdma_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->sdma_fw->size != sdma_req_size) {
@@ -863,7 +854,7 @@  static int cik_init_microcode(struct radeon_device *rdev)
 	/* No MC ucode on APUs */
 	if (!(rdev->flags & RADEON_IS_IGP)) {
 		snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
-		err = request_firmware(&rdev->mc_fw, fw_name, &pdev->dev);
+		err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
 		if (err)
 			goto out;
 		if (rdev->mc_fw->size != mc_req_size) {
@@ -875,8 +866,6 @@  static int cik_init_microcode(struct radeon_device *rdev)
 	}
 
 out:
-	platform_device_unregister(pdev);
-
 	if (err) {
 		if (err != -EINVAL)
 			printk(KERN_ERR
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index f30127c..465b17e 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -22,7 +22,6 @@ 
  * Authors: Alex Deucher
  */
 #include <linux/firmware.h>
-#include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/module.h>
 #include <drm/drmP.h>
@@ -684,7 +683,6 @@  int ni_mc_load_microcode(struct radeon_device *rdev)
 
 int ni_init_microcode(struct radeon_device *rdev)
 {
-	struct platform_device *pdev;
 	const char *chip_name;
 	const char *rlc_chip_name;
 	size_t pfp_req_size, me_req_size, rlc_req_size, mc_req_size;
@@ -694,13 +692,6 @@  int ni_init_microcode(struct radeon_device *rdev)
 
 	DRM_DEBUG("\n");
 
-	pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
-	err = IS_ERR(pdev);
-	if (err) {
-		printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
-		return -EINVAL;
-	}
-
 	switch (rdev->family) {
 	case CHIP_BARTS:
 		chip_name = "BARTS";
@@ -753,7 +744,7 @@  int ni_init_microcode(struct radeon_device *rdev)
 	DRM_INFO("Loading %s Microcode\n", chip_name);
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
-	err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->pfp_fw->size != pfp_req_size) {
@@ -765,7 +756,7 @@  int ni_init_microcode(struct radeon_device *rdev)
 	}
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
-	err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->me_fw->size != me_req_size) {
@@ -776,7 +767,7 @@  int ni_init_microcode(struct radeon_device *rdev)
 	}
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", rlc_chip_name);
-	err = request_firmware(&rdev->rlc_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->rlc_fw->size != rlc_req_size) {
@@ -789,7 +780,7 @@  int ni_init_microcode(struct radeon_device *rdev)
 	/* no MC ucode on TN */
 	if (!(rdev->flags & RADEON_IS_IGP)) {
 		snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
-		err = request_firmware(&rdev->mc_fw, fw_name, &pdev->dev);
+		err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
 		if (err)
 			goto out;
 		if (rdev->mc_fw->size != mc_req_size) {
@@ -802,7 +793,7 @@  int ni_init_microcode(struct radeon_device *rdev)
 
 	if ((rdev->family >= CHIP_BARTS) && (rdev->family <= CHIP_CAYMAN)) {
 		snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name);
-		err = request_firmware(&rdev->smc_fw, fw_name, &pdev->dev);
+		err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
 		if (err)
 			goto out;
 		if (rdev->smc_fw->size != smc_req_size) {
@@ -814,8 +805,6 @@  int ni_init_microcode(struct radeon_device *rdev)
 	}
 
 out:
-	platform_device_unregister(pdev);
-
 	if (err) {
 		if (err != -EINVAL)
 			printk(KERN_ERR
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
index d0314ec..d5a4541 100644
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
@@ -39,7 +39,6 @@ 
 #include "atom.h"
 
 #include <linux/firmware.h>
-#include <linux/platform_device.h>
 #include <linux/module.h>
 
 #include "r100_reg_safe.h"
@@ -989,18 +988,11 @@  void r100_ring_start(struct radeon_device *rdev, struct radeon_ring *ring)
 /* Load the microcode for the CP */
 static int r100_cp_init_microcode(struct radeon_device *rdev)
 {
-	struct platform_device *pdev;
 	const char *fw_name = NULL;
 	int err;
 
 	DRM_DEBUG_KMS("\n");
 
-	pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
-	err = IS_ERR(pdev);
-	if (err) {
-		printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
-		return -EINVAL;
-	}
 	if ((rdev->family == CHIP_R100) || (rdev->family == CHIP_RV100) ||
 	    (rdev->family == CHIP_RV200) || (rdev->family == CHIP_RS100) ||
 	    (rdev->family == CHIP_RS200)) {
@@ -1042,8 +1034,7 @@  static int r100_cp_init_microcode(struct radeon_device *rdev)
 		fw_name = FIRMWARE_R520;
 	}
 
-	err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
-	platform_device_unregister(pdev);
+	err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
 	if (err) {
 		printk(KERN_ERR "radeon_cp: Failed to load firmware \"%s\"\n",
 		       fw_name);
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index dcac7fd..05a30ba 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -28,7 +28,6 @@ 
 #include <linux/slab.h>
 #include <linux/seq_file.h>
 #include <linux/firmware.h>
-#include <linux/platform_device.h>
 #include <linux/module.h>
 #include <drm/drmP.h>
 #include <drm/radeon_drm.h>
@@ -2144,7 +2143,6 @@  void r600_cp_stop(struct radeon_device *rdev)
 
 int r600_init_microcode(struct radeon_device *rdev)
 {
-	struct platform_device *pdev;
 	const char *chip_name;
 	const char *rlc_chip_name;
 	const char *smc_chip_name = "RV770";
@@ -2154,13 +2152,6 @@  int r600_init_microcode(struct radeon_device *rdev)
 
 	DRM_DEBUG("\n");
 
-	pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
-	err = IS_ERR(pdev);
-	if (err) {
-		printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
-		return -EINVAL;
-	}
-
 	switch (rdev->family) {
 	case CHIP_R600:
 		chip_name = "R600";
@@ -2272,7 +2263,7 @@  int r600_init_microcode(struct radeon_device *rdev)
 	DRM_INFO("Loading %s Microcode\n", chip_name);
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
-	err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->pfp_fw->size != pfp_req_size) {
@@ -2284,7 +2275,7 @@  int r600_init_microcode(struct radeon_device *rdev)
 	}
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
-	err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->me_fw->size != me_req_size) {
@@ -2295,7 +2286,7 @@  int r600_init_microcode(struct radeon_device *rdev)
 	}
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", rlc_chip_name);
-	err = request_firmware(&rdev->rlc_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->rlc_fw->size != rlc_req_size) {
@@ -2307,7 +2298,7 @@  int r600_init_microcode(struct radeon_device *rdev)
 
 	if ((rdev->family >= CHIP_RV770) && (rdev->family <= CHIP_HEMLOCK)) {
 		snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", smc_chip_name);
-		err = request_firmware(&rdev->smc_fw, fw_name, &pdev->dev);
+		err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
 		if (err)
 			goto out;
 		if (rdev->smc_fw->size != smc_req_size) {
@@ -2319,8 +2310,6 @@  int r600_init_microcode(struct radeon_device *rdev)
 	}
 
 out:
-	platform_device_unregister(pdev);
-
 	if (err) {
 		if (err != -EINVAL)
 			printk(KERN_ERR
diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c
index ce5a10c..a7690d2 100644
--- a/drivers/gpu/drm/radeon/radeon_uvd.c
+++ b/drivers/gpu/drm/radeon/radeon_uvd.c
@@ -56,20 +56,12 @@  static void radeon_uvd_idle_work_handler(struct work_struct *work);
 
 int radeon_uvd_init(struct radeon_device *rdev)
 {
-	struct platform_device *pdev;
 	unsigned long bo_size;
 	const char *fw_name;
 	int i, r;
 
 	INIT_DELAYED_WORK(&rdev->uvd.idle_work, radeon_uvd_idle_work_handler);
 
-	pdev = platform_device_register_simple("radeon_uvd", 0, NULL, 0);
-	r = IS_ERR(pdev);
-	if (r) {
-		dev_err(rdev->dev, "radeon_uvd: Failed to register firmware\n");
-		return -EINVAL;
-	}
-
 	switch (rdev->family) {
 	case CHIP_RV710:
 	case CHIP_RV730:
@@ -112,16 +104,13 @@  int radeon_uvd_init(struct radeon_device *rdev)
 		return -EINVAL;
 	}
 
-	r = request_firmware(&rdev->uvd_fw, fw_name, &pdev->dev);
+	r = request_firmware(&rdev->uvd_fw, fw_name, rdev->dev);
 	if (r) {
 		dev_err(rdev->dev, "radeon_uvd: Can't load firmware \"%s\"\n",
 			fw_name);
-		platform_device_unregister(pdev);
 		return r;
 	}
 
-	platform_device_unregister(pdev);
-
 	bo_size = RADEON_GPU_PAGE_ALIGN(rdev->uvd_fw->size + 8) +
 		  RADEON_UVD_STACK_SIZE + RADEON_UVD_HEAP_SIZE;
 	r = radeon_bo_create(rdev, bo_size, PAGE_SIZE, true,
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index 99160d8..5988eeb 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -22,7 +22,6 @@ 
  * Authors: Alex Deucher
  */
 #include <linux/firmware.h>
-#include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/module.h>
 #include <drm/drmP.h>
@@ -1541,7 +1540,6 @@  static int si_mc_load_microcode(struct radeon_device *rdev)
 
 static int si_init_microcode(struct radeon_device *rdev)
 {
-	struct platform_device *pdev;
 	const char *chip_name;
 	const char *rlc_chip_name;
 	size_t pfp_req_size, me_req_size, ce_req_size, rlc_req_size, mc_req_size;
@@ -1551,13 +1549,6 @@  static int si_init_microcode(struct radeon_device *rdev)
 
 	DRM_DEBUG("\n");
 
-	pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
-	err = IS_ERR(pdev);
-	if (err) {
-		printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
-		return -EINVAL;
-	}
-
 	switch (rdev->family) {
 	case CHIP_TAHITI:
 		chip_name = "TAHITI";
@@ -1615,7 +1606,7 @@  static int si_init_microcode(struct radeon_device *rdev)
 	DRM_INFO("Loading %s Microcode\n", chip_name);
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
-	err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->pfp_fw->size != pfp_req_size) {
@@ -1627,7 +1618,7 @@  static int si_init_microcode(struct radeon_device *rdev)
 	}
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
-	err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->me_fw->size != me_req_size) {
@@ -1638,7 +1629,7 @@  static int si_init_microcode(struct radeon_device *rdev)
 	}
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name);
-	err = request_firmware(&rdev->ce_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->ce_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->ce_fw->size != ce_req_size) {
@@ -1649,7 +1640,7 @@  static int si_init_microcode(struct radeon_device *rdev)
 	}
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", rlc_chip_name);
-	err = request_firmware(&rdev->rlc_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->rlc_fw->size != rlc_req_size) {
@@ -1660,7 +1651,7 @@  static int si_init_microcode(struct radeon_device *rdev)
 	}
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
-	err = request_firmware(&rdev->mc_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->mc_fw->size != mc_req_size) {
@@ -1671,7 +1662,7 @@  static int si_init_microcode(struct radeon_device *rdev)
 	}
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name);
-	err = request_firmware(&rdev->smc_fw, fw_name, &pdev->dev);
+	err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
 	if (err)
 		goto out;
 	if (rdev->smc_fw->size != smc_req_size) {
@@ -1682,8 +1673,6 @@  static int si_init_microcode(struct radeon_device *rdev)
 	}
 
 out:
-	platform_device_unregister(pdev);
-
 	if (err) {
 		if (err != -EINVAL)
 			printk(KERN_ERR