Commit 017fbb66 authored by Flora Cui's avatar Flora Cui Committed by Alex Deucher
Browse files

drm/amdgpu/discovery: check ip_discovery fw file available

parent 62c1ed0a
Loading
Loading
Loading
Loading
+16 −15
Original line number Diff line number Diff line
@@ -113,8 +113,7 @@
#include "amdgpu_isp.h"
#endif

#define FIRMWARE_IP_DISCOVERY "amdgpu/ip_discovery.bin"
MODULE_FIRMWARE(FIRMWARE_IP_DISCOVERY);
MODULE_FIRMWARE("amdgpu/ip_discovery.bin");

#define mmIP_DISCOVERY_VERSION  0x16A00
#define mmRCC_CONFIG_MEMSIZE	0xde3
@@ -297,21 +296,13 @@ static int amdgpu_discovery_read_binary_from_mem(struct amdgpu_device *adev,
	return ret;
}

static int amdgpu_discovery_read_binary_from_file(struct amdgpu_device *adev, uint8_t *binary)
static int amdgpu_discovery_read_binary_from_file(struct amdgpu_device *adev,
							uint8_t *binary,
							const char *fw_name)
{
	const struct firmware *fw;
	const char *fw_name;
	int r;

	switch (amdgpu_discovery) {
	case 2:
		fw_name = FIRMWARE_IP_DISCOVERY;
		break;
	default:
		dev_warn(adev->dev, "amdgpu_discovery is not set properly\n");
		return -EINVAL;
	}

	r = request_firmware(&fw, fw_name, adev->dev);
	if (r) {
		dev_err(adev->dev, "can't load firmware \"%s\"\n",
@@ -404,10 +395,19 @@ static int amdgpu_discovery_verify_npsinfo(struct amdgpu_device *adev,
	return 0;
}

static const char *amdgpu_discovery_get_fw_name(struct amdgpu_device *adev)
{
	if (amdgpu_discovery == 2)
		return "amdgpu/ip_discovery.bin";

	return NULL;
}

static int amdgpu_discovery_init(struct amdgpu_device *adev)
{
	struct table_info *info;
	struct binary_header *bhdr;
	const char *fw_name;
	uint16_t offset;
	uint16_t size;
	uint16_t checksum;
@@ -419,9 +419,10 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
		return -ENOMEM;

	/* Read from file if it is the preferred option */
	if (amdgpu_discovery == 2) {
	fw_name = amdgpu_discovery_get_fw_name(adev);
	if (fw_name != NULL) {
		dev_info(adev->dev, "use ip discovery information from file");
		r = amdgpu_discovery_read_binary_from_file(adev, adev->mman.discovery_bin);
		r = amdgpu_discovery_read_binary_from_file(adev, adev->mman.discovery_bin, fw_name);

		if (r) {
			dev_err(adev->dev, "failed to read ip discovery binary from file\n");