Lines Matching refs:adev

92 static bool amdgpu_read_bios_from_vram(struct amdgpu_device *adev)  in amdgpu_read_bios_from_vram()  argument
98 if (!(adev->flags & AMD_IS_APU)) in amdgpu_read_bios_from_vram()
99 if (amdgpu_device_need_post(adev)) in amdgpu_read_bios_from_vram()
103 if (pci_resource_len(adev->pdev, 0) == 0) in amdgpu_read_bios_from_vram()
106 adev->bios = NULL; in amdgpu_read_bios_from_vram()
107 vram_base = pci_resource_start(adev->pdev, 0); in amdgpu_read_bios_from_vram()
112 adev->bios = kmalloc(size, GFP_KERNEL); in amdgpu_read_bios_from_vram()
113 if (!adev->bios) { in amdgpu_read_bios_from_vram()
117 adev->bios_size = size; in amdgpu_read_bios_from_vram()
118 memcpy_fromio(adev->bios, bios, size); in amdgpu_read_bios_from_vram()
121 if (!check_atom_bios(adev->bios, size)) { in amdgpu_read_bios_from_vram()
122 kfree(adev->bios); in amdgpu_read_bios_from_vram()
129 bool amdgpu_read_bios(struct amdgpu_device *adev) in amdgpu_read_bios() argument
134 adev->bios = NULL; in amdgpu_read_bios()
136 bios = pci_map_rom(adev->pdev, &size); in amdgpu_read_bios()
140 adev->bios = kzalloc(size, GFP_KERNEL); in amdgpu_read_bios()
141 if (adev->bios == NULL) { in amdgpu_read_bios()
142 pci_unmap_rom(adev->pdev, bios); in amdgpu_read_bios()
145 adev->bios_size = size; in amdgpu_read_bios()
146 memcpy_fromio(adev->bios, bios, size); in amdgpu_read_bios()
147 pci_unmap_rom(adev->pdev, bios); in amdgpu_read_bios()
149 if (!check_atom_bios(adev->bios, size)) { in amdgpu_read_bios()
150 kfree(adev->bios); in amdgpu_read_bios()
157 static bool amdgpu_read_bios_from_rom(struct amdgpu_device *adev) in amdgpu_read_bios_from_rom() argument
162 if (!adev->asic_funcs || !adev->asic_funcs->read_bios_from_rom) in amdgpu_read_bios_from_rom()
166 if (amdgpu_asic_read_bios_from_rom(adev, &header[0], sizeof(header)) == false) in amdgpu_read_bios_from_rom()
179 adev->bios = kmalloc(len, GFP_KERNEL); in amdgpu_read_bios_from_rom()
180 if (!adev->bios) { in amdgpu_read_bios_from_rom()
184 adev->bios_size = len; in amdgpu_read_bios_from_rom()
187 amdgpu_asic_read_bios_from_rom(adev, adev->bios, len); in amdgpu_read_bios_from_rom()
189 if (!check_atom_bios(adev->bios, len)) { in amdgpu_read_bios_from_rom()
190 kfree(adev->bios); in amdgpu_read_bios_from_rom()
197 static bool amdgpu_read_platform_bios(struct amdgpu_device *adev) in amdgpu_read_platform_bios() argument
199 phys_addr_t rom = adev->pdev->rom; in amdgpu_read_platform_bios()
200 size_t romlen = adev->pdev->romlen; in amdgpu_read_platform_bios()
203 adev->bios = NULL; in amdgpu_read_platform_bios()
208 adev->bios = kzalloc(romlen, GFP_KERNEL); in amdgpu_read_platform_bios()
209 if (!adev->bios) in amdgpu_read_platform_bios()
216 memcpy_fromio(adev->bios, bios, romlen); in amdgpu_read_platform_bios()
219 if (!check_atom_bios(adev->bios, romlen)) in amdgpu_read_platform_bios()
222 adev->bios_size = romlen; in amdgpu_read_platform_bios()
226 kfree(adev->bios); in amdgpu_read_platform_bios()
278 static bool amdgpu_atrm_get_bios(struct amdgpu_device *adev) in amdgpu_atrm_get_bios() argument
289 if (dev_is_removable(&adev->pdev->dev)) in amdgpu_atrm_get_bios()
312 adev->bios = kmalloc(size, GFP_KERNEL); in amdgpu_atrm_get_bios()
313 if (!adev->bios) { in amdgpu_atrm_get_bios()
314 dev_err(adev->dev, "Unable to allocate bios\n"); in amdgpu_atrm_get_bios()
320 adev->bios, in amdgpu_atrm_get_bios()
327 if (!check_atom_bios(adev->bios, size)) { in amdgpu_atrm_get_bios()
328 kfree(adev->bios); in amdgpu_atrm_get_bios()
331 adev->bios_size = size; in amdgpu_atrm_get_bios()
335 static inline bool amdgpu_atrm_get_bios(struct amdgpu_device *adev) in amdgpu_atrm_get_bios() argument
341 static bool amdgpu_read_disabled_bios(struct amdgpu_device *adev) in amdgpu_read_disabled_bios() argument
343 return (!adev->asic_funcs || !adev->asic_funcs->read_disabled_bios) ? in amdgpu_read_disabled_bios()
344 false : amdgpu_asic_read_disabled_bios(adev); in amdgpu_read_disabled_bios()
348 static bool amdgpu_acpi_vfct_bios(struct amdgpu_device *adev) in amdgpu_acpi_vfct_bios() argument
359 dev_info(adev->dev, "ACPI VFCT table present but broken (too short #1),skipping\n"); in amdgpu_acpi_vfct_bios()
372 dev_info(adev->dev, "ACPI VFCT image header truncated,skipping\n"); in amdgpu_acpi_vfct_bios()
378 dev_info(adev->dev, "ACPI VFCT image truncated,skipping\n"); in amdgpu_acpi_vfct_bios()
383 vhdr->PCIBus == adev->pdev->bus->number && in amdgpu_acpi_vfct_bios()
384 vhdr->PCIDevice == PCI_SLOT(adev->pdev->devfn) && in amdgpu_acpi_vfct_bios()
385 vhdr->PCIFunction == PCI_FUNC(adev->pdev->devfn) && in amdgpu_acpi_vfct_bios()
386 vhdr->VendorID == adev->pdev->vendor && in amdgpu_acpi_vfct_bios()
387 vhdr->DeviceID == adev->pdev->device) { in amdgpu_acpi_vfct_bios()
388 adev->bios = kmemdup(&vbios->VbiosContent, in amdgpu_acpi_vfct_bios()
392 if (!check_atom_bios(adev->bios, vhdr->ImageLength)) { in amdgpu_acpi_vfct_bios()
393 kfree(adev->bios); in amdgpu_acpi_vfct_bios()
396 adev->bios_size = vhdr->ImageLength; in amdgpu_acpi_vfct_bios()
401 dev_info(adev->dev, "ACPI VFCT table present but broken (too short #2),skipping\n"); in amdgpu_acpi_vfct_bios()
405 static inline bool amdgpu_acpi_vfct_bios(struct amdgpu_device *adev) in amdgpu_acpi_vfct_bios() argument
411 static bool amdgpu_get_bios_apu(struct amdgpu_device *adev) in amdgpu_get_bios_apu() argument
413 if (amdgpu_acpi_vfct_bios(adev)) { in amdgpu_get_bios_apu()
414 dev_info(adev->dev, "Fetched VBIOS from VFCT\n"); in amdgpu_get_bios_apu()
418 if (amdgpu_read_bios_from_vram(adev)) { in amdgpu_get_bios_apu()
419 dev_info(adev->dev, "Fetched VBIOS from VRAM BAR\n"); in amdgpu_get_bios_apu()
423 if (amdgpu_read_bios(adev)) { in amdgpu_get_bios_apu()
424 dev_info(adev->dev, "Fetched VBIOS from ROM BAR\n"); in amdgpu_get_bios_apu()
428 if (amdgpu_read_platform_bios(adev)) { in amdgpu_get_bios_apu()
429 dev_info(adev->dev, "Fetched VBIOS from platform\n"); in amdgpu_get_bios_apu()
433 dev_err(adev->dev, "Unable to locate a BIOS ROM\n"); in amdgpu_get_bios_apu()
440 static bool amdgpu_get_bios_dgpu(struct amdgpu_device *adev) in amdgpu_get_bios_dgpu() argument
442 if (amdgpu_atrm_get_bios(adev)) { in amdgpu_get_bios_dgpu()
443 dev_info(adev->dev, "Fetched VBIOS from ATRM\n"); in amdgpu_get_bios_dgpu()
447 if (amdgpu_acpi_vfct_bios(adev)) { in amdgpu_get_bios_dgpu()
448 dev_info(adev->dev, "Fetched VBIOS from VFCT\n"); in amdgpu_get_bios_dgpu()
453 if (amdgpu_read_bios_from_vram(adev)) { in amdgpu_get_bios_dgpu()
454 dev_info(adev->dev, "Fetched VBIOS from VRAM BAR\n"); in amdgpu_get_bios_dgpu()
458 if (amdgpu_read_platform_bios(adev)) { in amdgpu_get_bios_dgpu()
459 dev_info(adev->dev, "Fetched VBIOS from platform\n"); in amdgpu_get_bios_dgpu()
463 if (amdgpu_read_bios(adev)) { in amdgpu_get_bios_dgpu()
464 dev_info(adev->dev, "Fetched VBIOS from ROM BAR\n"); in amdgpu_get_bios_dgpu()
468 if (amdgpu_read_bios_from_rom(adev)) { in amdgpu_get_bios_dgpu()
469 dev_info(adev->dev, "Fetched VBIOS from ROM\n"); in amdgpu_get_bios_dgpu()
473 if (amdgpu_read_disabled_bios(adev)) { in amdgpu_get_bios_dgpu()
474 dev_info(adev->dev, "Fetched VBIOS from disabled ROM BAR\n"); in amdgpu_get_bios_dgpu()
478 dev_err(adev->dev, "Unable to locate a BIOS ROM\n"); in amdgpu_get_bios_dgpu()
485 bool amdgpu_get_bios(struct amdgpu_device *adev) in amdgpu_get_bios() argument
489 if (adev->flags & AMD_IS_APU) in amdgpu_get_bios()
490 found = amdgpu_get_bios_apu(adev); in amdgpu_get_bios()
492 found = amdgpu_get_bios_dgpu(adev); in amdgpu_get_bios()
495 adev->is_atom_fw = adev->asic_type >= CHIP_VEGA10; in amdgpu_get_bios()
501 bool amdgpu_soc15_read_bios_from_rom(struct amdgpu_device *adev, in amdgpu_soc15_read_bios_from_rom() argument
515 if (adev->flags & AMD_IS_APU) in amdgpu_soc15_read_bios_from_rom()
517 if (!adev->smuio.funcs || in amdgpu_soc15_read_bios_from_rom()
518 !adev->smuio.funcs->get_rom_index_offset || in amdgpu_soc15_read_bios_from_rom()
519 !adev->smuio.funcs->get_rom_data_offset) in amdgpu_soc15_read_bios_from_rom()
526 adev->smuio.funcs->get_rom_index_offset(adev); in amdgpu_soc15_read_bios_from_rom()
528 adev->smuio.funcs->get_rom_data_offset(adev); in amdgpu_soc15_read_bios_from_rom()
530 if (adev->nbio.funcs && in amdgpu_soc15_read_bios_from_rom()
531 adev->nbio.funcs->get_rom_offset) { in amdgpu_soc15_read_bios_from_rom()
532 rom_offset = adev->nbio.funcs->get_rom_offset(adev); in amdgpu_soc15_read_bios_from_rom()