summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/i915/soc/intel_rom.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/soc/intel_rom.c')
-rw-r--r--drivers/gpu/drm/i915/soc/intel_rom.c161
1 files changed, 0 insertions, 161 deletions
diff --git a/drivers/gpu/drm/i915/soc/intel_rom.c b/drivers/gpu/drm/i915/soc/intel_rom.c
deleted file mode 100644
index 2f17dc856e7f..000000000000
--- a/drivers/gpu/drm/i915/soc/intel_rom.c
+++ /dev/null
@@ -1,161 +0,0 @@
-// SPDX-License-Identifier: MIT
-/*
- * Copyright © 2024 Intel Corporation
- */
-
-#include "i915_drv.h"
-#include "i915_reg.h"
-
-#include "intel_rom.h"
-#include "intel_uncore.h"
-
-struct intel_rom {
- /* for PCI ROM */
- struct pci_dev *pdev;
- void __iomem *oprom;
-
- /* for SPI */
- struct intel_uncore *uncore;
- loff_t offset;
-
- size_t size;
-
- u32 (*read32)(struct intel_rom *rom, loff_t offset);
- u16 (*read16)(struct intel_rom *rom, loff_t offset);
- void (*read_block)(struct intel_rom *rom, void *data, loff_t offset, size_t size);
- void (*free)(struct intel_rom *rom);
-};
-
-static u32 spi_read32(struct intel_rom *rom, loff_t offset)
-{
- intel_uncore_write(rom->uncore, PRIMARY_SPI_ADDRESS,
- rom->offset + offset);
-
- return intel_uncore_read(rom->uncore, PRIMARY_SPI_TRIGGER);
-}
-
-static u16 spi_read16(struct intel_rom *rom, loff_t offset)
-{
- return spi_read32(rom, offset) & 0xffff;
-}
-
-struct intel_rom *intel_rom_spi(struct drm_device *drm)
-{
- struct drm_i915_private *i915 = to_i915(drm);
- struct intel_rom *rom;
- u32 static_region;
-
- rom = kzalloc(sizeof(*rom), GFP_KERNEL);
- if (!rom)
- return NULL;
-
- rom->uncore = &i915->uncore;
-
- static_region = intel_uncore_read(rom->uncore, SPI_STATIC_REGIONS);
- static_region &= OPTIONROM_SPI_REGIONID_MASK;
- intel_uncore_write(rom->uncore, PRIMARY_SPI_REGIONID, static_region);
-
- rom->offset = intel_uncore_read(rom->uncore, OROM_OFFSET) & OROM_OFFSET_MASK;
-
- rom->size = 0x200000;
-
- rom->read32 = spi_read32;
- rom->read16 = spi_read16;
-
- return rom;
-}
-
-static u32 pci_read32(struct intel_rom *rom, loff_t offset)
-{
- return ioread32(rom->oprom + offset);
-}
-
-static u16 pci_read16(struct intel_rom *rom, loff_t offset)
-{
- return ioread16(rom->oprom + offset);
-}
-
-static void pci_read_block(struct intel_rom *rom, void *data,
- loff_t offset, size_t size)
-{
- memcpy_fromio(data, rom->oprom + offset, size);
-}
-
-static void pci_free(struct intel_rom *rom)
-{
- pci_unmap_rom(rom->pdev, rom->oprom);
-}
-
-struct intel_rom *intel_rom_pci(struct drm_device *drm)
-{
- struct intel_rom *rom;
-
- rom = kzalloc(sizeof(*rom), GFP_KERNEL);
- if (!rom)
- return NULL;
-
- rom->pdev = to_pci_dev(drm->dev);
-
- rom->oprom = pci_map_rom(rom->pdev, &rom->size);
- if (!rom->oprom) {
- kfree(rom);
- return NULL;
- }
-
- rom->read32 = pci_read32;
- rom->read16 = pci_read16;
- rom->read_block = pci_read_block;
- rom->free = pci_free;
-
- return rom;
-}
-
-u32 intel_rom_read32(struct intel_rom *rom, loff_t offset)
-{
- return rom->read32(rom, offset);
-}
-
-u16 intel_rom_read16(struct intel_rom *rom, loff_t offset)
-{
- return rom->read16(rom, offset);
-}
-
-void intel_rom_read_block(struct intel_rom *rom, void *data,
- loff_t offset, size_t size)
-{
- u32 *ptr = data;
- loff_t index;
-
- if (rom->read_block) {
- rom->read_block(rom, data, offset, size);
- return;
- }
-
- for (index = 0; index < size; index += 4)
- *ptr++ = rom->read32(rom, offset + index);
-}
-
-loff_t intel_rom_find(struct intel_rom *rom, u32 needle)
-{
- loff_t offset;
-
- for (offset = 0; offset < rom->size; offset += 4) {
- if (rom->read32(rom, offset) == needle)
- return offset;
- }
-
- return -ENOENT;
-}
-
-size_t intel_rom_size(struct intel_rom *rom)
-{
- return rom->size;
-}
-
-void intel_rom_free(struct intel_rom *rom)
-{
- if (rom && rom->free)
- rom->free(rom);
-
- kfree(rom);
-}