summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNishant Prajapati <nishantpjpt@google.com>2021-05-06 09:36:41 +0530
committerNishant Prajapati <nishantpjpt@google.com>2021-05-06 05:32:00 +0000
commita7c17065c3886f8debb97cdff8bf509de94714ee (patch)
treea0d39f291806239f94f46db1ce8af82a2277729e
parentf9b2ca71995a76c1b892d07b920b68cad2547a03 (diff)
downloadjaneiro-a7c17065c3886f8debb97cdff8bf509de94714ee.tar.gz
edgetpu: Remove abrolhos files
Signed-off-by: Nishant Prajapati <nishantpjpt@google.com> Change-Id: I39df56c56489eaa465cbcc951b130a40254f86a8
-rw-r--r--drivers/edgetpu/abrolhos-core.c2
-rw-r--r--drivers/edgetpu/abrolhos-debug-dump.c135
-rw-r--r--drivers/edgetpu/abrolhos-debug-dump.h16
-rw-r--r--drivers/edgetpu/abrolhos-device-group.c2
-rw-r--r--drivers/edgetpu/abrolhos-device.c170
-rw-r--r--drivers/edgetpu/abrolhos-firmware.c235
-rw-r--r--drivers/edgetpu/abrolhos-firmware.h54
-rw-r--r--drivers/edgetpu/abrolhos-fs.c2
-rw-r--r--drivers/edgetpu/abrolhos-iommu.c2
-rw-r--r--drivers/edgetpu/abrolhos-platform.c423
-rw-r--r--drivers/edgetpu/abrolhos-platform.h61
-rw-r--r--drivers/edgetpu/abrolhos-pm.c794
-rw-r--r--drivers/edgetpu/abrolhos-pm.h166
-rw-r--r--drivers/edgetpu/abrolhos-thermal.c328
-rw-r--r--drivers/edgetpu/abrolhos-usage-stats.c2
-rw-r--r--drivers/edgetpu/abrolhos-wakelock.c2
-rw-r--r--drivers/edgetpu/abrolhos/config-mailbox.h46
-rw-r--r--drivers/edgetpu/abrolhos/config-tpu-cpu.h30
-rw-r--r--drivers/edgetpu/abrolhos/config.h67
-rw-r--r--drivers/edgetpu/abrolhos/csrs.h36
20 files changed, 0 insertions, 2573 deletions
diff --git a/drivers/edgetpu/abrolhos-core.c b/drivers/edgetpu/abrolhos-core.c
deleted file mode 100644
index 02cf784..0000000
--- a/drivers/edgetpu/abrolhos-core.c
+++ /dev/null
@@ -1,2 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include "edgetpu-core.c"
diff --git a/drivers/edgetpu/abrolhos-debug-dump.c b/drivers/edgetpu/abrolhos-debug-dump.c
deleted file mode 100644
index a4dd732..0000000
--- a/drivers/edgetpu/abrolhos-debug-dump.c
+++ /dev/null
@@ -1,135 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-
-#include <linux/platform_data/sscoredump.h>
-#include <linux/platform_device.h>
-#include <linux/slab.h>
-
-#include "abrolhos-platform.h"
-
-#include "edgetpu-debug-dump.c"
-
-static int abrolhos_sscd_generate_coredump(void *p_etdev, void *p_dump_setup)
-{
- struct edgetpu_dev *etdev;
- struct edgetpu_debug_dump_setup *dump_setup;
- struct abrolhos_platform_dev *pdev;
- struct sscd_platform_data *pdata;
- struct platform_device *sscd_dev;
- struct sscd_segment *segs;
- struct edgetpu_debug_dump *debug_dump;
- struct edgetpu_crash_reason *crash_reason;
- struct edgetpu_dump_segment *dump_seg;
- char crash_info[128];
- int dump_segments_num;
- int i, ret;
- u64 offset;
-
- if (!p_etdev || !p_dump_setup)
- return -EINVAL;
-
- etdev = (struct edgetpu_dev *)p_etdev;
- dump_setup = (struct edgetpu_debug_dump_setup *)p_dump_setup;
- pdev = container_of(etdev, struct abrolhos_platform_dev, edgetpu_dev);
- pdata = (struct sscd_platform_data *)pdev->sscd_info.pdata;
- sscd_dev = (struct platform_device *)pdev->sscd_info.dev;
- if (!pdata->sscd_report) {
- etdev_err(etdev, "failed to generate coredump");
- return -ENOENT;
- }
-
- offset = sizeof(struct edgetpu_debug_dump_setup);
- debug_dump = (struct edgetpu_debug_dump *)((u64 *)dump_setup +
- word_align_offset(offset));
-
- /* Populate crash reason */
- crash_reason = (struct edgetpu_crash_reason *)((u64 *)dump_setup +
- word_align_offset(debug_dump->crash_reason_offset));
- scnprintf(crash_info, sizeof(crash_info),
- "[edgetpu_coredump] error code: 0x%llx", crash_reason->code);
-
- /* Populate dump segments */
- dump_segments_num = debug_dump->dump_segments_num;
- segs = kmalloc_array(dump_segments_num,
- sizeof(struct sscd_segment),
- GFP_KERNEL);
- if (!segs)
- return -ENOMEM;
-
- dump_seg = (struct edgetpu_dump_segment *)((u64 *)dump_setup +
- word_align_offset(debug_dump->dump_segments_offset));
- offset = debug_dump->dump_segments_offset +
- sizeof(struct edgetpu_dump_segment);
- for (i = 0; i < dump_segments_num; i++) {
- segs[i].addr = &dump_seg[i].src_addr + 1;
- segs[i].size = dump_seg[i].size;
- segs[i].paddr = (void *)(etdev->debug_dump_mem.tpu_addr +
- offset);
- segs[i].vaddr = (void *)(etdev->debug_dump_mem.vaddr +
- offset);
- offset += sizeof(struct edgetpu_dump_segment) + dump_seg->size;
- dump_seg = (struct edgetpu_dump_segment *)
- ((u64 *)dump_seg + word_align_offset(
- sizeof(struct edgetpu_dump_segment) +
- dump_seg->size));
- }
-
- /* Pass dump data to SSCD daemon */
- etdev_dbg(etdev, "report: %d segments", dump_segments_num);
- ret = pdata->sscd_report(sscd_dev, segs, dump_segments_num,
- SSCD_FLAGS_ELFARM64HDR, crash_info);
-
- kfree(segs);
-
- return ret;
-}
-
-int edgetpu_debug_dump_init(struct edgetpu_dev *etdev)
-{
- size_t size;
- int ret;
- struct edgetpu_debug_dump_setup *dump_setup;
-
- size = EDGETPU_DEBUG_DUMP_MEM_SIZE;
-
- /*
- * Allocate a buffer for various dump segments
- */
- ret = edgetpu_alloc_coherent(etdev, size, &etdev->debug_dump_mem,
- EDGETPU_CONTEXT_KCI);
- if (ret) {
- etdev_err(etdev, "Debug dump seg alloc failed");
- etdev->debug_dump_mem.vaddr = NULL;
- return ret;
- }
- dump_setup =
- (struct edgetpu_debug_dump_setup *)etdev->debug_dump_mem.vaddr;
- dump_setup->dump_mem_size = size;
- memset(dump_setup, 0, dump_setup->dump_mem_size);
-
- /*
- * Allocate memory for debug dump handlers
- */
- etdev->debug_dump_handlers = kcalloc(DUMP_REQ_REASON_NUM,
- sizeof(*etdev->debug_dump_handlers),
- GFP_KERNEL);
- if (!etdev->debug_dump_handlers)
- return -ENOMEM;
- etdev->debug_dump_handlers[DUMP_REQ_REASON_BY_USER] =
- abrolhos_sscd_generate_coredump;
-
- return ret;
-}
-
-void edgetpu_debug_dump_exit(struct edgetpu_dev *etdev)
-{
- if (!etdev->debug_dump_mem.vaddr) {
- etdev_dbg(etdev, "Debug dump not allocated");
- return;
- }
- /*
- * Free the memory assigned for debug dump
- */
- edgetpu_free_coherent(etdev, &etdev->debug_dump_mem,
- EDGETPU_CONTEXT_KCI);
- kfree(etdev->debug_dump_handlers);
-}
diff --git a/drivers/edgetpu/abrolhos-debug-dump.h b/drivers/edgetpu/abrolhos-debug-dump.h
deleted file mode 100644
index 62ef111..0000000
--- a/drivers/edgetpu/abrolhos-debug-dump.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Module that defines structure to retrieve debug dump segments
- * from abrolhos firmware.
- *
- * Copyright (C) 2020 Google, Inc.
- */
-#ifndef __ABROLHOS_DEBUG_DUMP_H__
-#define __ABROLHOS_DEBUG_DUMP_H__
-
-struct abrolhos_sscd_info {
- void *pdata; /* SSCD platform data */
- void *dev; /* SSCD platform device */
-};
-
-#endif /* ABROLHOS_DEBUG_DUMP_H_ */
diff --git a/drivers/edgetpu/abrolhos-device-group.c b/drivers/edgetpu/abrolhos-device-group.c
deleted file mode 100644
index d918348..0000000
--- a/drivers/edgetpu/abrolhos-device-group.c
+++ /dev/null
@@ -1,2 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include "edgetpu-device-group.c"
diff --git a/drivers/edgetpu/abrolhos-device.c b/drivers/edgetpu/abrolhos-device.c
deleted file mode 100644
index 8d08e33..0000000
--- a/drivers/edgetpu/abrolhos-device.c
+++ /dev/null
@@ -1,170 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Abrolhos Edge TPU ML accelerator device host support.
- *
- * Copyright (C) 2019 Google, Inc.
- */
-
-#include <linux/irqreturn.h>
-
-#include "edgetpu-config.h"
-#include "edgetpu-debug-dump.h"
-#include "edgetpu-internal.h"
-#include "edgetpu-mailbox.h"
-#include "abrolhos-platform.h"
-#include "abrolhos-pm.h"
-#include "edgetpu-telemetry.h"
-
-#define HOST_NONSECURE_INTRSRCMASKREG 0x000f0004
-
-#define SSMT_NS_READ_STREAM_VID_OFFSET(n) (0x1000u + (0x4u * (n)))
-#define SSMT_NS_WRITE_STREAM_VID_OFFSET(n) (0x1200u + (0x4u * (n)))
-
-#define SSMT_NS_READ_STREAM_VID_REG(base, n) \
- ((base) + SSMT_NS_READ_STREAM_VID_OFFSET(n))
-#define SSMT_NS_WRITE_STREAM_VID_REG(base, n) \
- ((base) + SSMT_NS_WRITE_STREAM_VID_OFFSET(n))
-
-/*
- * The interrupt handler for mailboxes.
- *
- * This handler reads the IntSrcStatusReg available on Abrolhos to get the
- * response queue doorbell status of mailboxes 0-7 in one read. It loops
- * through the bits to check pending interrupts and invokes their IRQ
- * handlers. This allows for more efficient handling of interrupts than
- * edgetpu_mailbox_handle_irq handler.
- */
-static irqreturn_t
-abrolhos_mailbox_handle_irq(struct edgetpu_mailbox_manager *mgr)
-{
- struct edgetpu_mailbox *mailbox;
- uint i;
- u32 val, clear_val;
- u8 mailbox_rsp_queue_status_bits;
-
- if (!mgr)
- return IRQ_NONE;
-
- read_lock(&mgr->mailboxes_lock);
- val = edgetpu_dev_read_32(mgr->etdev,
- HOST_NONSECURE_INT_SRC_STATUS_REG);
- clear_val = val & (0xff << 1);
- edgetpu_dev_write_32(mgr->etdev,
- HOST_NONSECURE_INT_SRC_CLEAR_REG, clear_val);
-
- mailbox_rsp_queue_status_bits = val >> 1;
- for (i = 0; i < mgr->num_mailbox; i++) {
- mailbox = mgr->mailboxes[i];
- if (mailbox && (mailbox_rsp_queue_status_bits & 0x1) &&
- mailbox->handle_irq)
- mailbox->handle_irq(mailbox);
- mailbox_rsp_queue_status_bits >>= 1;
- if (!mailbox_rsp_queue_status_bits)
- break;
- }
- read_unlock(&mgr->mailboxes_lock);
-
- return IRQ_HANDLED;
-}
-
-irqreturn_t edgetpu_chip_irq_handler(int irq, void *arg)
-{
- struct edgetpu_dev *etdev = arg;
-
- edgetpu_telemetry_irq_handler(etdev);
- edgetpu_debug_dump_resp_handler(etdev);
-
- return abrolhos_mailbox_handle_irq(etdev->mailbox_manager);
-}
-
-u64 edgetpu_chip_tpu_timestamp(struct edgetpu_dev *etdev)
-{
- return edgetpu_dev_read_64(etdev, EDGETPU_REG_CPUNS_TIMESTAMP);
-}
-
-void edgetpu_chip_init(struct edgetpu_dev *etdev)
-{
- int i;
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
-
- /* Disable the CustomBlock Interrupt. */
- edgetpu_dev_write_32(etdev, HOST_NONSECURE_INTRSRCMASKREG, 0x1);
-
- if (!abpdev->ssmt_base)
- return;
-
- /* Setup non-secure SCIDs, assume VID = SCID */
- for (i = 0; i < EDGETPU_NCONTEXTS; i++) {
- writel(i, SSMT_NS_READ_STREAM_VID_REG(abpdev->ssmt_base, i));
- writel(i, SSMT_NS_WRITE_STREAM_VID_REG(abpdev->ssmt_base, i));
- }
-}
-
-void edgetpu_chip_exit(struct edgetpu_dev *etdev)
-{
-}
-
-void edgetpu_mark_probe_fail(struct edgetpu_dev *etdev)
-{
-}
-
-struct edgetpu_dumpregs_range edgetpu_chip_statusregs_ranges[] = {
- {
- .firstreg = EDGETPU_REG_USER_HIB_FIRST_ERROR_STATUS,
- .lastreg = EDGETPU_REG_USER_HIB_FIRST_ERROR_STATUS,
- },
- {
- .firstreg = EDGETPU_REG_SC_RUNSTATUS,
- .lastreg = EDGETPU_REG_SC_RUNSTATUS,
- },
- {
- .firstreg = EDGETPU_REG_USER_HIB_OUT_ACTVQ_INT_STAT,
- .lastreg = EDGETPU_REG_USER_HIB_OUT_ACTVQ_INT_STAT,
- },
- {
- .firstreg = EDGETPU_REG_USER_HIB_IN_ACTVQ_INT_STAT,
- .lastreg = EDGETPU_REG_USER_HIB_IN_ACTVQ_INT_STAT,
- },
- {
- .firstreg = EDGETPU_REG_USER_HIB_PARAMQ_INT_STAT,
- .lastreg = EDGETPU_REG_USER_HIB_PARAMQ_INT_STAT,
- },
- {
- .firstreg = EDGETPU_REG_USER_HIB_TOPLVL_INT_STAT,
- .lastreg = EDGETPU_REG_USER_HIB_TOPLVL_INT_STAT,
- },
-};
-int edgetpu_chip_statusregs_nranges =
- ARRAY_SIZE(edgetpu_chip_statusregs_ranges);
-
-struct edgetpu_dumpregs_range edgetpu_chip_tile_statusregs_ranges[] = {
-};
-int edgetpu_chip_tile_statusregs_nranges =
- ARRAY_SIZE(edgetpu_chip_tile_statusregs_ranges);
-
-static void edgetpu_chip_set_pm_qos(struct edgetpu_dev *etdev, u32 value)
-{
- abrolhos_pm_set_pm_qos(etdev, value);
-}
-
-static void edgetpu_chip_set_bts(struct edgetpu_dev *etdev, u32 value)
-{
- abrolhos_pm_set_bts(etdev, value);
-}
-
-void edgetpu_chip_handle_reverse_kci(struct edgetpu_dev *etdev,
- struct edgetpu_kci_response_element *resp)
-{
- switch (resp->code) {
- case RKCI_CODE_PM_QOS:
- edgetpu_chip_set_pm_qos(etdev, resp->retval);
- break;
- case RKCI_CODE_BTS:
- edgetpu_chip_set_bts(etdev, resp->retval);
- break;
- default:
- etdev_warn(etdev, "%s: Unrecognized KCI request: %u\n",
- __func__, resp->code);
- break;
- }
-}
diff --git a/drivers/edgetpu/abrolhos-firmware.c b/drivers/edgetpu/abrolhos-firmware.c
deleted file mode 100644
index 5fbec26..0000000
--- a/drivers/edgetpu/abrolhos-firmware.c
+++ /dev/null
@@ -1,235 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Abrolhos Edge TPU ML accelerator firmware download support.
- *
- * Copyright (C) 2020 Google, Inc.
- */
-
-#include <linux/dma-mapping.h>
-#include <linux/gsa/gsa_tpu.h>
-#include <linux/slab.h>
-
-#include "abrolhos-platform.h"
-#include "edgetpu-config.h"
-#include "edgetpu-firmware.h"
-#include "edgetpu-internal.h"
-#include "edgetpu-kci.h"
-#include "edgetpu-mailbox.h"
-#include "mobile-firmware.h"
-
-static int abrolhos_firmware_alloc_buffer(
- struct edgetpu_firmware *et_fw,
- struct edgetpu_firmware_buffer *fw_buf)
-{
- struct edgetpu_dev *etdev = et_fw->etdev;
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
-
- /* Allocate extra space the image header */
- size_t buffer_size =
- abpdev->fw_region_size + MOBILE_FW_HEADER_SIZE;
-
- fw_buf->vaddr = kzalloc(buffer_size, GFP_KERNEL);
- if (!fw_buf->vaddr) {
- etdev_err(etdev, "%s: failed to allocate buffer (%zu bytes)\n",
- __func__, buffer_size);
- return -ENOMEM;
- }
- fw_buf->dma_addr = 0;
- fw_buf->alloc_size = buffer_size;
- fw_buf->used_size_align = 16;
- return 0;
-}
-
-static void abrolhos_firmware_free_buffer(
- struct edgetpu_firmware *et_fw,
- struct edgetpu_firmware_buffer *fw_buf)
-{
- kfree(fw_buf->vaddr);
- fw_buf->vaddr = NULL;
- fw_buf->dma_addr = 0;
- fw_buf->alloc_size = 0;
- fw_buf->used_size_align = 0;
-}
-
-static int abrolhos_firmware_setup_buffer(
- struct edgetpu_firmware *et_fw,
- struct edgetpu_firmware_buffer *fw_buf)
-{
- return 0;
-}
-
-static void abrolhos_firmware_teardown_buffer(
- struct edgetpu_firmware *et_fw,
- struct edgetpu_firmware_buffer *fw_buf)
-{
-}
-
-static int abrolhos_firmware_restart(struct edgetpu_firmware *et_fw)
-{
- struct edgetpu_dev *etdev = et_fw->etdev;
- struct abrolhos_platform_dev *edgetpu_pdev = to_abrolhos_dev(etdev);
- int tpu_state;
-
- tpu_state = gsa_send_tpu_cmd(edgetpu_pdev->gsa_dev, GSA_TPU_START);
-
- if (tpu_state < 0) {
- etdev_err(etdev, "GSA restart firmware failed: %d\n",
- tpu_state);
- return -EIO;
- }
-
- etdev_dbg(etdev, "Firmware restart successful\n");
-
- return 0;
-}
-
-static int abrolhos_firmware_prepare_run(struct edgetpu_firmware *et_fw,
- struct edgetpu_firmware_buffer *fw_buf)
-{
- struct edgetpu_dev *etdev = et_fw->etdev;
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
- void *image_vaddr, *header_vaddr;
- struct mobile_image_config *image_config;
- phys_addr_t image_start, image_end, carveout_start, carveout_end;
- dma_addr_t header_dma_addr;
- int ret, tpu_state;
-
- if (fw_buf->used_size < MOBILE_FW_HEADER_SIZE) {
- etdev_err(etdev, "Invalid buffer size: %zu < %d\n",
- fw_buf->used_size, MOBILE_FW_HEADER_SIZE);
- return -EINVAL;
- }
-
- tpu_state = gsa_send_tpu_cmd(abpdev->gsa_dev, GSA_TPU_GET_STATE);
-
- if (tpu_state < GSA_TPU_STATE_INACTIVE) {
- etdev_warn(etdev, "GSA failed to retrieve current status: %d\n",
- tpu_state);
- etdev_warn(etdev, "Assuming device is inactive\n");
- tpu_state = GSA_TPU_STATE_INACTIVE;
- }
-
- etdev_dbg(etdev, "GSA Reports TPU state: %d\n", tpu_state);
-
- if (tpu_state > GSA_TPU_STATE_INACTIVE) {
- ret = gsa_unload_tpu_fw_image(abpdev->gsa_dev);
- if (ret) {
- etdev_warn(etdev, "GSA release failed: %d\n", ret);
- return -EIO;
- }
- }
-
- image_vaddr = memremap(abpdev->fw_region_paddr, abpdev->fw_region_size,
- MEMREMAP_WC);
-
- if (!image_vaddr) {
- etdev_err(etdev, "memremap failed\n");
- return -ENOMEM;
- }
-
- /* Skip the header */
- memcpy(image_vaddr, fw_buf->vaddr + MOBILE_FW_HEADER_SIZE,
- fw_buf->used_size - MOBILE_FW_HEADER_SIZE);
-
- /* Allocate coherent memory for the image header */
- header_vaddr = dma_alloc_coherent(abpdev->gsa_dev,
- MOBILE_FW_HEADER_SIZE,
- &header_dma_addr, GFP_KERNEL);
- if (!header_vaddr) {
- etdev_err(etdev,
- "Failed to allocate coherent memory for header\n");
- ret = -ENOMEM;
- goto out_unmap;
- }
-
- memcpy(header_vaddr, fw_buf->vaddr, MOBILE_FW_HEADER_SIZE);
- etdev_dbg(etdev,
- "Requesting GSA image load. meta = %llX payload = %llX",
- header_dma_addr, (u64)abpdev->fw_region_paddr);
-
- ret = gsa_load_tpu_fw_image(abpdev->gsa_dev, header_dma_addr,
- abpdev->fw_region_paddr);
- if (ret) {
- etdev_err(etdev, "GSA authentication failed: %d\n", ret);
- ret = -EIO;
- goto out_free_gsa;
- }
-
- /* fetch the firmware versions */
- image_config = fw_buf->vaddr + MOBILE_IMAGE_CONFIG_OFFSET;
- memcpy(&etdev->fw_version, &image_config->firmware_versions,
- sizeof(etdev->fw_version));
-
- /*
- * GSA verifies the image config addresses and sizes are valid,
- * so we don't perform overflow checks here.
- */
- image_start = (phys_addr_t)image_config->carveout_base;
- image_end = (phys_addr_t)(image_config->firmware_base +
- image_config->firmware_size - 1);
- carveout_start = abpdev->fw_region_paddr;
- carveout_end = carveout_start + abpdev->fw_region_size - 1;
-
- /* Image must fit within the carveout */
- if (image_start < carveout_start || image_end > carveout_end) {
- etdev_err(etdev, "Firmware image doesn't fit in carveout\n");
- etdev_err(etdev, "Image config: %pap - %pap\n", &image_start,
- &image_end);
- etdev_err(etdev, "Carveout: %pap - %pap\n", &carveout_start,
- &carveout_end);
- ret = -ERANGE;
- goto out_free_gsa;
- }
-
- /* Reset KCI mailbox before starting f/w, don't process anything old.*/
- edgetpu_mailbox_reset(etdev->kci->mailbox);
-
- tpu_state = gsa_send_tpu_cmd(abpdev->gsa_dev, GSA_TPU_START);
-
- if (tpu_state < 0) {
- etdev_err(etdev, "GSA start firmware failed: %d\n", tpu_state);
- ret = -EIO;
- }
-
-out_free_gsa:
- dma_free_coherent(abpdev->gsa_dev, MOBILE_FW_HEADER_SIZE,
- header_vaddr, header_dma_addr);
-out_unmap:
- memunmap(image_vaddr);
- return ret;
-}
-
-static const struct edgetpu_firmware_handlers abrolhos_firmware_handlers = {
- .alloc_buffer = abrolhos_firmware_alloc_buffer,
- .free_buffer = abrolhos_firmware_free_buffer,
- .setup_buffer = abrolhos_firmware_setup_buffer,
- .teardown_buffer = abrolhos_firmware_teardown_buffer,
- .prepare_run = abrolhos_firmware_prepare_run,
- .restart = abrolhos_firmware_restart,
-};
-
-int mobile_edgetpu_firmware_create(struct edgetpu_dev *etdev)
-{
- return edgetpu_firmware_create(etdev, &abrolhos_firmware_handlers);
-}
-
-void mobile_edgetpu_firmware_destroy(struct edgetpu_dev *etdev)
-{
- edgetpu_firmware_destroy(etdev);
-}
-
-int edgetpu_chip_firmware_run(struct edgetpu_dev *etdev, const char *name,
- enum edgetpu_firmware_flags flags)
-{
- return edgetpu_firmware_run(etdev, name, flags);
-}
-
-unsigned long edgetpu_chip_firmware_iova(struct edgetpu_dev *etdev)
-{
- /*
- * There is no IOVA in Abrolhos, since firmware the IOMMU is
- * bypassed and the only translation in effect is the one
- * done by instruction remap registers
- */
- return EDGETPU_INSTRUCTION_REMAP_BASE;
-}
diff --git a/drivers/edgetpu/abrolhos-firmware.h b/drivers/edgetpu/abrolhos-firmware.h
deleted file mode 100644
index 8e7db77..0000000
--- a/drivers/edgetpu/abrolhos-firmware.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Implements utilities for firmware management of Abrolhos.
- *
- * Copyright (C) 2020 Google, Inc.
- */
-#ifndef __ABROLHOS_FIRMWARE_H__
-#define __ABROLHOS_FIRMWARE_H__
-
-#include <linux/sizes.h>
-
-#include "edgetpu-internal.h"
-#include "edgetpu.h"
-
-/* abrolhos FW header size */
-#define ABROLHOS_FW_HEADER_SIZE SZ_4K
-/* The offset to the signed firmware header. */
-#define ABROLHOS_HEADER_OFFSET 0x400
-/* The offset to image configuration. */
-#define ABROLHOS_IMAGE_CONFIG_OFFSET (ABROLHOS_HEADER_OFFSET + 0x160)
-
-/*
- * The image configuration attached to the signed firmware.
- */
-struct abrolhos_image_config {
- __u32 carveout_base;
- __u32 firmware_base;
- __u32 firmware_size;
- struct edgetpu_fw_version firmware_versions;
-} __packed;
-
-/*
- * Abrolhos firmware header.
- */
-struct abrolhos_image_header {
- char sig[512];
- char pub[512];
- int Magic;
- int Generation;
- int RollbackInfo;
- int Length;
- char Flags[16];
- char BodyHash[32];
- char ChipId[32];
- char AuthConfig[256];
- struct abrolhos_image_config ImageConfig;
-};
-
-int abrolhos_edgetpu_firmware_create(struct edgetpu_dev *etdev);
-void abrolhos_edgetpu_firmware_destroy(struct edgetpu_dev *etdev);
-
-int abrolhos_edgetpu_firmware_run_default(struct edgetpu_dev *etdev);
-
-#endif /* __ABROLHOS_FIRMWARE_H__ */
diff --git a/drivers/edgetpu/abrolhos-fs.c b/drivers/edgetpu/abrolhos-fs.c
deleted file mode 100644
index 5babc06..0000000
--- a/drivers/edgetpu/abrolhos-fs.c
+++ /dev/null
@@ -1,2 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include "edgetpu-fs.c"
diff --git a/drivers/edgetpu/abrolhos-iommu.c b/drivers/edgetpu/abrolhos-iommu.c
deleted file mode 100644
index 52ce973..0000000
--- a/drivers/edgetpu/abrolhos-iommu.c
+++ /dev/null
@@ -1,2 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include "edgetpu-google-iommu.c"
diff --git a/drivers/edgetpu/abrolhos-platform.c b/drivers/edgetpu/abrolhos-platform.c
deleted file mode 100644
index 2661853..0000000
--- a/drivers/edgetpu/abrolhos-platform.c
+++ /dev/null
@@ -1,423 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Abrolhos device driver for the Google EdgeTPU ML accelerator.
- *
- * Copyright (C) 2019 Google, Inc.
- */
-
-#include <linux/device.h>
-#include <linux/dma-mapping.h>
-#include <linux/gsa/gsa_tpu.h>
-#include <linux/init.h>
-#include <linux/io.h>
-#include <linux/iommu.h>
-#include <linux/module.h>
-#include <linux/of.h>
-#include <linux/of_address.h>
-#include <linux/of_platform.h>
-#include <linux/platform_data/sscoredump.h>
-#include <linux/platform_device.h>
-#include <linux/slab.h>
-#include <linux/types.h>
-
-#include "abrolhos-platform.h"
-#include "abrolhos-pm.h"
-#include "edgetpu-config.h"
-#include "edgetpu-firmware.h"
-#include "edgetpu-internal.h"
-#include "edgetpu-iremap-pool.h"
-#include "edgetpu-mmu.h"
-#include "edgetpu-pm.h"
-#include "edgetpu-telemetry.h"
-#include "mobile-firmware.h"
-
-static const struct of_device_id edgetpu_of_match[] = {
- { .compatible = "google,darwinn", },
- { /* end of list */ },
-};
-MODULE_DEVICE_TABLE(of, edgetpu_of_match);
-
-static void sscd_release(struct device *dev)
-{
- pr_debug(DRIVER_NAME " release\n");
-}
-static struct sscd_platform_data sscd_pdata;
-static struct platform_device sscd_dev = {
- .name = DRIVER_NAME,
- .driver_override = SSCD_NAME,
- .id = -1,
- .dev = {
- .platform_data = &sscd_pdata,
- .release = sscd_release,
- },
-};
-/*
- * Log and trace buffers at the beginning of the remapped region,
- * pool memory afterwards.
- */
-
-#define EDGETPU_POOL_MEM_OFFSET (EDGETPU_TELEMETRY_BUFFER_SIZE * 2)
-
-static void abrolhos_get_telemetry_mem(struct abrolhos_platform_dev *etpdev,
- enum edgetpu_telemetry_type type,
- struct edgetpu_coherent_mem *mem)
-{
- int offset = type == EDGETPU_TELEMETRY_TRACE ?
- EDGETPU_TELEMETRY_BUFFER_SIZE :
- 0;
- mem->vaddr = etpdev->shared_mem_vaddr + offset;
- mem->dma_addr = EDGETPU_REMAPPED_DATA_ADDR + offset;
- mem->tpu_addr = EDGETPU_REMAPPED_DATA_ADDR + offset;
- mem->host_addr = 0;
- mem->size = EDGETPU_TELEMETRY_BUFFER_SIZE;
-}
-
-/* Setup the firmware region carveout. */
-static int
-edgetpu_platform_setup_fw_region(struct abrolhos_platform_dev *etpdev)
-{
- struct edgetpu_dev *etdev = &etpdev->edgetpu_dev;
- struct platform_device *gsa_pdev;
- struct device *dev = etdev->dev;
- struct resource r;
- struct device_node *np;
- int err;
- u32 csr_phys, csr_iova, csr_size;
- size_t region_map_size =
- EDGETPU_FW_SIZE_MAX + EDGETPU_REMAPPED_DATA_SIZE;
-
- np = of_parse_phandle(dev->of_node, "memory-region", 0);
- if (!np) {
- dev_err(dev, "No memory region for firmware\n");
- return -ENODEV;
- }
-
- err = of_address_to_resource(np, 0, &r);
- of_node_put(np);
- if (err) {
- dev_err(dev, "No memory address assigned to firmware region\n");
- return err;
- }
-
- if (resource_size(&r) < region_map_size) {
- dev_err(dev,
- "Memory region for firmware too small (%zu bytes needed, got %llu)\n",
- region_map_size, resource_size(&r));
- return -ENOSPC;
- }
-
- /* Get GSA device from device tree */
- np = of_parse_phandle(dev->of_node, "gsa-device", 0);
- if (!np) {
- dev_err(dev, "No gsa-dev in device tree\n");
- return -ENODEV;
- }
- gsa_pdev = of_find_device_by_node(np);
- if (!gsa_pdev) {
- dev_err(dev, "GSA device not found\n");
- of_node_put(np);
- return -ENODEV;
- }
- etpdev->gsa_dev = &gsa_pdev->dev;
- of_node_put(np);
-
- etpdev->fw_region_paddr = r.start;
- etpdev->fw_region_size = EDGETPU_FW_SIZE_MAX;
-
- etpdev->shared_mem_vaddr =
- memremap(r.start + EDGETPU_REMAPPED_DATA_OFFSET,
- EDGETPU_REMAPPED_DATA_SIZE, MEMREMAP_WC);
- if (!etpdev->shared_mem_vaddr) {
- dev_err(dev, "Shared memory remap failed\n");
- return -EINVAL;
- }
- etpdev->shared_mem_paddr = r.start + EDGETPU_REMAPPED_DATA_OFFSET;
-
- err = of_property_read_u32(dev->of_node, "csr-iova", &csr_iova);
- /* Device did not define a CSR region */
- if (err)
- return 0;
-
- /* If an IOVA was found, we must also have physical address and size */
- err = of_property_read_u32(dev->of_node, "csr-phys", &csr_phys);
- if (err) {
- dev_err(dev, "Device tree: invalid CSR physical address\n");
- goto out_unmap;
- }
-
- err = of_property_read_u32(dev->of_node, "csr-size", &csr_size);
- if (err) {
- dev_err(dev, "Device tree: invalid CSR size\n");
- goto out_unmap;
- }
-
- etpdev->csr_paddr = csr_phys;
- etpdev->csr_iova = csr_iova;
- etpdev->csr_size = csr_size;
- return 0;
-out_unmap:
- memunmap(etpdev->shared_mem_vaddr);
- etpdev->shared_mem_vaddr = NULL;
- return err;
-}
-
-static void edgetpu_platform_cleanup_fw_region(
- struct abrolhos_platform_dev *etpdev)
-{
- gsa_unload_tpu_fw_image(etpdev->gsa_dev);
-
- if (!etpdev->shared_mem_vaddr)
- return;
- memunmap(etpdev->shared_mem_vaddr);
- etpdev->shared_mem_vaddr = NULL;
-}
-
-int edgetpu_setup_mmu(struct edgetpu_dev *etdev)
-{
- int ret;
-
- /* No MMU info to pass to attach, IOMMU API will handle. */
- ret = edgetpu_mmu_attach(etdev, NULL);
- if (ret)
- dev_err(etdev->dev, "failed to attach IOMMU: %d\n", ret);
- return ret;
-}
-
-static int abrolhos_parse_ssmt(struct abrolhos_platform_dev *etpdev)
-{
- struct edgetpu_dev *etdev = &etpdev->edgetpu_dev;
- struct platform_device *pdev = to_platform_device(etdev->dev);
- struct resource *res;
- int rc;
- void __iomem *ssmt_base;
-
- res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ssmt");
- if (!res) {
- etdev_warn(etdev, "Failed to find SSMT register base");
- return -EINVAL;
- }
- ssmt_base = devm_ioremap_resource(&pdev->dev, res);
- if (IS_ERR(ssmt_base)) {
- rc = PTR_ERR(ssmt_base);
- etdev_warn(etdev, "Failed to map SSMT register base: %d\n", rc);
- return rc;
- }
- etpdev->ssmt_base = ssmt_base;
- return 0;
-}
-
-static int edgetpu_platform_probe(struct platform_device *pdev)
-{
- struct device *dev = &pdev->dev;
- struct abrolhos_platform_dev *abpdev;
- struct resource *r;
- struct edgetpu_mapped_resource regs;
- int ret;
-
- abpdev = devm_kzalloc(dev, sizeof(*abpdev), GFP_KERNEL);
- if (!abpdev)
- return -ENOMEM;
-
- platform_set_drvdata(pdev, &abpdev->edgetpu_dev);
- abpdev->edgetpu_dev.dev = dev;
-
- r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- if (IS_ERR_OR_NULL(r)) {
- dev_err(dev, "failed to get memory resource\n");
- return -ENODEV;
- }
- regs.phys = r->start;
- regs.size = resource_size(r);
-
- regs.mem = devm_ioremap_resource(dev, r);
- if (IS_ERR_OR_NULL(regs.mem)) {
- dev_err(dev, "failed to map registers\n");
- return -ENODEV;
- }
-
- mutex_init(&abpdev->platform_pwr.policy_lock);
- abpdev->platform_pwr.curr_policy = TPU_POLICY_MAX;
-
- ret = abrolhos_pm_create(&abpdev->edgetpu_dev);
-
- if (ret) {
- dev_err(dev, "Failed to initialize PM interface (%d)\n", ret);
- return ret;
- }
-
- ret = edgetpu_platform_setup_fw_region(abpdev);
- if (ret) {
- dev_err(dev, "%s setup fw regions failed: %d\n", DRIVER_NAME,
- ret);
- goto out_shutdown;
- }
-
- ret = edgetpu_iremap_pool_create(
- &abpdev->edgetpu_dev,
- /* Base virtual address (kernel address space) */
- abpdev->shared_mem_vaddr + EDGETPU_POOL_MEM_OFFSET,
- /* Base DMA address */
- EDGETPU_REMAPPED_DATA_ADDR + EDGETPU_POOL_MEM_OFFSET,
- /* Base TPU address */
- EDGETPU_REMAPPED_DATA_ADDR + EDGETPU_POOL_MEM_OFFSET,
- /* Base physical address */
- abpdev->shared_mem_paddr + EDGETPU_POOL_MEM_OFFSET,
- /* Size */
- EDGETPU_REMAPPED_DATA_SIZE - EDGETPU_POOL_MEM_OFFSET,
- /* Granularity */
- PAGE_SIZE);
- if (ret) {
- dev_err(dev,
- "%s failed to initialize remapped memory pool: %d\n",
- DRIVER_NAME, ret);
- goto out_cleanup_fw;
- }
-
- abpdev->edgetpu_dev.mcp_id = -1;
- abpdev->edgetpu_dev.mcp_die_index = 0;
- abpdev->irq = platform_get_irq(pdev, 0);
- ret = edgetpu_device_add(&abpdev->edgetpu_dev, &regs);
-
- if (!ret && abpdev->irq >= 0)
- ret = edgetpu_register_irq(&abpdev->edgetpu_dev, abpdev->irq);
-
- if (ret) {
- dev_err(dev, "%s edgetpu setup failed: %d\n", DRIVER_NAME,
- ret);
- goto out_destroy_iremap;
- }
-
- ret = abrolhos_parse_ssmt(abpdev);
- if (ret)
- dev_warn(
- dev,
- "SSMT setup failed (%d). Context isolation not enforced\n",
- ret);
-
- abrolhos_get_telemetry_mem(abpdev, EDGETPU_TELEMETRY_LOG,
- &abpdev->log_mem);
- abrolhos_get_telemetry_mem(abpdev, EDGETPU_TELEMETRY_TRACE,
- &abpdev->trace_mem);
-
- ret = edgetpu_telemetry_init(&abpdev->edgetpu_dev, &abpdev->log_mem,
- &abpdev->trace_mem);
- if (ret)
- goto out_remove_device;
-
- ret = mobile_edgetpu_firmware_create(&abpdev->edgetpu_dev);
- if (ret) {
- dev_err(dev,
- "%s initialize firmware downloader failed: %d\n",
- DRIVER_NAME, ret);
- goto out_tel_exit;
- }
-
- dev_dbg(dev, "Creating thermal device\n");
- abpdev->edgetpu_dev.thermal = devm_tpu_thermal_create(dev);
-
- dev_info(dev, "%s edgetpu initialized. Build: %s\n",
- abpdev->edgetpu_dev.dev_name, GIT_REPO_TAG);
-
- dev_dbg(dev, "Probe finished, powering down\n");
- /* Turn the device off unless a client request is already received. */
- edgetpu_pm_shutdown(&abpdev->edgetpu_dev, false);
-
- abpdev->sscd_info.pdata = &sscd_pdata;
- abpdev->sscd_info.dev = &sscd_dev;
-
- return ret;
-out_tel_exit:
- edgetpu_telemetry_exit(&abpdev->edgetpu_dev);
-out_remove_device:
- edgetpu_device_remove(&abpdev->edgetpu_dev);
-out_destroy_iremap:
- edgetpu_iremap_pool_destroy(&abpdev->edgetpu_dev);
-out_cleanup_fw:
- edgetpu_platform_cleanup_fw_region(abpdev);
-out_shutdown:
- dev_dbg(dev, "Probe finished with error %d, powering down\n", ret);
- edgetpu_pm_shutdown(&abpdev->edgetpu_dev, true);
- return ret;
-}
-
-static int edgetpu_platform_remove(struct platform_device *pdev)
-{
- struct edgetpu_dev *etdev = platform_get_drvdata(pdev);
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
-
- mobile_edgetpu_firmware_destroy(etdev);
- if (abpdev->irq >= 0)
- edgetpu_unregister_irq(etdev, abpdev->irq);
-
- edgetpu_pm_get(etdev->pm);
- edgetpu_telemetry_exit(etdev);
- edgetpu_device_remove(etdev);
- edgetpu_iremap_pool_destroy(etdev);
- edgetpu_platform_cleanup_fw_region(abpdev);
- edgetpu_pm_put(etdev->pm);
- edgetpu_pm_shutdown(etdev, true);
- abrolhos_pm_destroy(etdev);
- return 0;
-}
-
-#if IS_ENABLED(CONFIG_PM_SLEEP)
-
-static int edgetpu_platform_suspend(struct device *dev)
-{
- struct edgetpu_dev *etdev = dev_get_drvdata(dev);
-
- return edgetpu_pm_suspend(etdev);
-}
-
-static int edgetpu_platform_resume(struct device *dev)
-{
- struct edgetpu_dev *etdev = dev_get_drvdata(dev);
-
- return edgetpu_pm_resume(etdev);
-}
-
-#endif /* IS_ENABLED(CONFIG_PM_SLEEP) */
-
-static const struct dev_pm_ops edgetpu_pm_ops = {
- SET_SYSTEM_SLEEP_PM_OPS(edgetpu_platform_suspend,
- edgetpu_platform_resume)
-};
-
-static struct platform_driver edgetpu_platform_driver = {
- .probe = edgetpu_platform_probe,
- .remove = edgetpu_platform_remove,
- .driver = {
- .name = "edgetpu_platform",
- .of_match_table = edgetpu_of_match,
- .pm = &edgetpu_pm_ops,
- },
-};
-
-static int __init edgetpu_platform_init(void)
-{
- int ret;
-
- ret = edgetpu_init();
- if (ret)
- return ret;
-
- /* Register SSCD platform device */
- ret = platform_device_register(&sscd_dev);
- if (ret)
- pr_err(DRIVER_NAME " SSCD platform device registration failed: %d\n",
- ret);
- return platform_driver_register(&edgetpu_platform_driver);
-}
-
-static void __exit edgetpu_platform_exit(void)
-{
- platform_driver_unregister(&edgetpu_platform_driver);
- platform_device_unregister(&sscd_dev);
- edgetpu_exit();
-}
-
-MODULE_DESCRIPTION("Google EdgeTPU platform driver");
-MODULE_LICENSE("GPL v2");
-module_init(edgetpu_platform_init);
-module_exit(edgetpu_platform_exit);
-MODULE_FIRMWARE(EDGETPU_DEFAULT_FIRMWARE_NAME);
diff --git a/drivers/edgetpu/abrolhos-platform.h b/drivers/edgetpu/abrolhos-platform.h
deleted file mode 100644
index 84e155e..0000000
--- a/drivers/edgetpu/abrolhos-platform.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Abrolhos device driver for the Google EdgeTPU ML accelerator.
- *
- * Copyright (C) 2019 Google, Inc.
- */
-#ifndef __ABROLHOS_PLATFORM_H__
-#define __ABROLHOS_PLATFORM_H__
-
-#include <linux/device.h>
-#include <linux/io.h>
-#include <linux/kernel.h>
-#include <linux/mutex.h>
-#include <linux/types.h>
-#include <soc/google/bcl.h>
-#include <soc/google/bts.h>
-#include <soc/google/exynos_pm_qos.h>
-
-#include "abrolhos-debug-dump.h"
-#include "abrolhos-pm.h"
-#include "edgetpu-internal.h"
-
-#define to_abrolhos_dev(etdev) \
- container_of(etdev, struct abrolhos_platform_dev, edgetpu_dev)
-
-struct abrolhos_platform_pwr {
- struct mutex policy_lock;
- enum tpu_pwr_state curr_policy;
- struct mutex state_lock;
- u64 min_state;
- u64 requested_state;
- /* INT/MIF requests for memory bandwidth */
- struct exynos_pm_qos_request int_min;
- struct exynos_pm_qos_request mif_min;
- /* BTS */
- unsigned int performance_scenario;
- int scenario_count;
- struct mutex scenario_lock;
-};
-
-struct abrolhos_platform_dev {
- struct edgetpu_dev edgetpu_dev;
- struct abrolhos_platform_pwr platform_pwr;
- int irq;
- phys_addr_t fw_region_paddr;
- size_t fw_region_size;
- void *shared_mem_vaddr;
- phys_addr_t shared_mem_paddr;
- size_t shared_mem_size;
- phys_addr_t csr_paddr;
- dma_addr_t csr_iova;
- size_t csr_size;
- struct device *gsa_dev;
- void __iomem *ssmt_base;
- struct edgetpu_coherent_mem log_mem;
- struct edgetpu_coherent_mem trace_mem;
- struct abrolhos_sscd_info sscd_info;
- struct gs101_bcl_dev *bcl_dev;
-};
-
-#endif /* __ABROLHOS_PLATFORM_H__ */
diff --git a/drivers/edgetpu/abrolhos-pm.c b/drivers/edgetpu/abrolhos-pm.c
deleted file mode 100644
index 0562f30..0000000
--- a/drivers/edgetpu/abrolhos-pm.c
+++ /dev/null
@@ -1,794 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Abrolhos EdgeTPU power management support
- *
- * Copyright (C) 2020 Google, Inc.
- */
-
-#include <linux/atomic.h>
-#include <linux/delay.h>
-#include <linux/gsa/gsa_tpu.h>
-#include <linux/module.h>
-#include <linux/pm_runtime.h>
-#include <soc/google/bcl.h>
-#include <soc/google/bts.h>
-#include <soc/google/exynos_pm_qos.h>
-
-#include "abrolhos-platform.h"
-#include "abrolhos-pm.h"
-#include "edgetpu-config.h"
-#include "edgetpu-firmware.h"
-#include "edgetpu-internal.h"
-#include "edgetpu-kci.h"
-#include "edgetpu-mailbox.h"
-#include "edgetpu-pm.h"
-#include "edgetpu-telemetry.h"
-
-#include "edgetpu-pm.c"
-
-/*
- * Encode INT/MIF values as a 16 bit pair in the 32-bit return value
- * (in units of MHz, to provide enough range)
- */
-#define PM_QOS_INT_SHIFT (16)
-#define PM_QOS_MIF_MASK (0xFFFF)
-#define PM_QOS_FACTOR (1000)
-
-/* Default power state: the lowest power state that keeps firmware running */
-static int power_state = TPU_DEEP_SLEEP_CLOCKS_SLOW;
-
-module_param(power_state, int, 0660);
-
-#define MAX_VOLTAGE_VAL 1250000
-
-static struct dentry *abrolhos_pwr_debugfs_dir;
-
-static int abrolhos_pwr_state_init(struct device *dev)
-{
- int ret;
- int curr_state;
-
- pm_runtime_enable(dev);
- curr_state = exynos_acpm_get_rate(TPU_ACPM_DOMAIN, 0);
-
- if (curr_state > TPU_OFF) {
- ret = pm_runtime_get_sync(dev);
- if (ret) {
- dev_err(dev, "pm_runtime_get_sync returned %d\n", ret);
- return ret;
- }
- }
-
- ret = exynos_acpm_set_init_freq(TPU_ACPM_DOMAIN, curr_state);
- if (ret) {
- dev_err(dev, "error initializing tpu state: %d\n", ret);
- if (curr_state > TPU_OFF)
- pm_runtime_put_sync(dev);
- return ret;
- }
-
- return ret;
-}
-
-static int abrolhos_pwr_state_set_locked(void *data, u64 val)
-{
- int ret;
- int curr_state;
- struct edgetpu_dev *etdev = (typeof(etdev))data;
- struct device *dev = etdev->dev;
-
- curr_state = exynos_acpm_get_rate(TPU_ACPM_DOMAIN, 0);
-
- dev_dbg(dev, "Power state %d -> %llu\n", curr_state, val);
-
- if (curr_state == TPU_OFF && val > TPU_OFF) {
- ret = pm_runtime_get_sync(dev);
- if (ret) {
- dev_err(dev, "pm_runtime_get_sync returned %d\n", ret);
- return ret;
- }
- }
-
- ret = exynos_acpm_set_rate(TPU_ACPM_DOMAIN, (unsigned long)val);
- if (ret) {
- dev_err(dev, "error setting tpu state: %d\n", ret);
- pm_runtime_put_sync(dev);
- return ret;
- }
-
- if (curr_state != TPU_OFF && val == TPU_OFF) {
- ret = pm_runtime_put_sync(dev);
- if (ret) {
- dev_err(dev, "%s: pm_runtime_put_sync returned %d\n",
- __func__, ret);
- return ret;
- }
- }
-
- return ret;
-}
-
-static int abrolhos_pwr_state_get_locked(void *data, u64 *val)
-{
- struct edgetpu_dev *etdev = (typeof(etdev))data;
- struct device *dev = etdev->dev;
-
- *val = exynos_acpm_get_rate(TPU_ACPM_DOMAIN, 0);
- dev_dbg(dev, "current tpu state: %llu\n", *val);
-
- return 0;
-}
-
-static int abrolhos_pwr_state_set(void *data, u64 val)
-{
- struct edgetpu_dev *etdev = (typeof(etdev))data;
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
- struct abrolhos_platform_pwr *platform_pwr = &abpdev->platform_pwr;
- int ret = 0;
-
- mutex_lock(&platform_pwr->state_lock);
- platform_pwr->requested_state = val;
- if (val >= platform_pwr->min_state)
- ret = abrolhos_pwr_state_set_locked(etdev, val);
- mutex_unlock(&platform_pwr->state_lock);
- return ret;
-}
-
-static int abrolhos_pwr_state_get(void *data, u64 *val)
-{
- struct edgetpu_dev *etdev = (typeof(etdev))data;
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
- struct abrolhos_platform_pwr *platform_pwr = &abpdev->platform_pwr;
- int ret;
-
- mutex_lock(&platform_pwr->state_lock);
- ret = abrolhos_pwr_state_get_locked(etdev, val);
- mutex_unlock(&platform_pwr->state_lock);
- return ret;
-}
-
-static int abrolhos_min_pwr_state_set(void *data, u64 val)
-{
- struct edgetpu_dev *etdev = (typeof(etdev))data;
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
- struct abrolhos_platform_pwr *platform_pwr = &abpdev->platform_pwr;
- int ret = 0;
-
- mutex_lock(&platform_pwr->state_lock);
- platform_pwr->min_state = val;
- if (val >= platform_pwr->requested_state)
- ret = abrolhos_pwr_state_set_locked(etdev, val);
- mutex_unlock(&platform_pwr->state_lock);
- return ret;
-}
-
-static int abrolhos_min_pwr_state_get(void *data, u64 *val)
-{
- struct edgetpu_dev *etdev = (typeof(etdev))data;
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
- struct abrolhos_platform_pwr *platform_pwr = &abpdev->platform_pwr;
-
- mutex_lock(&platform_pwr->state_lock);
- *val = platform_pwr->min_state;
- mutex_unlock(&platform_pwr->state_lock);
- return 0;
-}
-
-static int abrolhos_pwr_policy_set(void *data, u64 val)
-{
- struct abrolhos_platform_dev *abpdev = (typeof(abpdev))data;
- struct abrolhos_platform_pwr *platform_pwr = &abpdev->platform_pwr;
- int ret;
-
- mutex_lock(&platform_pwr->policy_lock);
- ret = exynos_acpm_set_policy(TPU_ACPM_DOMAIN, val);
-
- if (ret) {
- dev_err(abpdev->edgetpu_dev.dev,
- "unable to set policy %lld (ret %d)\n", val, ret);
- mutex_unlock(&platform_pwr->policy_lock);
- return ret;
- }
-
- platform_pwr->curr_policy = val;
- mutex_unlock(&platform_pwr->policy_lock);
- return 0;
-}
-
-static int abrolhos_pwr_policy_get(void *data, u64 *val)
-{
- struct abrolhos_platform_dev *abpdev = (typeof(abpdev))data;
- struct abrolhos_platform_pwr *platform_pwr = &abpdev->platform_pwr;
-
- mutex_lock(&platform_pwr->policy_lock);
- *val = platform_pwr->curr_policy;
- mutex_unlock(&platform_pwr->policy_lock);
-
- return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_tpu_pwr_policy, abrolhos_pwr_policy_get,
- abrolhos_pwr_policy_set, "%llu\n");
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_tpu_pwr_state, abrolhos_pwr_state_get,
- abrolhos_pwr_state_set, "%llu\n");
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_tpu_min_pwr_state, abrolhos_min_pwr_state_get,
- abrolhos_min_pwr_state_set, "%llu\n");
-
-static int edgetpu_core_rate_get(void *data, u64 *val)
-{
- *val = exynos_acpm_get_rate(TPU_ACPM_DOMAIN,
- TPU_DEBUG_REQ | TPU_CLK_CORE_DEBUG);
- return 0;
-}
-
-static int edgetpu_core_rate_set(void *data, u64 val)
-{
- unsigned long dbg_rate_req;
-
- dbg_rate_req = TPU_DEBUG_REQ | TPU_CLK_CORE_DEBUG;
- dbg_rate_req |= val;
-
- return exynos_acpm_set_rate(TPU_ACPM_DOMAIN, dbg_rate_req);
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_tpu_core_rate, edgetpu_core_rate_get,
- edgetpu_core_rate_set, "%llu\n");
-
-static int edgetpu_ctl_rate_get(void *data, u64 *val)
-{
- *val = exynos_acpm_get_rate(TPU_ACPM_DOMAIN,
- TPU_DEBUG_REQ | TPU_CLK_CTL_DEBUG);
- return 0;
-}
-
-static int edgetpu_ctl_rate_set(void *data, u64 val)
-{
- unsigned long dbg_rate_req;
-
- dbg_rate_req = TPU_DEBUG_REQ | TPU_CLK_CTL_DEBUG;
- dbg_rate_req |= 1000;
-
- return exynos_acpm_set_rate(TPU_ACPM_DOMAIN, dbg_rate_req);
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_tpu_ctl_rate, edgetpu_ctl_rate_get,
- edgetpu_ctl_rate_set, "%llu\n");
-
-static int edgetpu_axi_rate_get(void *data, u64 *val)
-{
- *val = exynos_acpm_get_rate(TPU_ACPM_DOMAIN,
- TPU_DEBUG_REQ | TPU_CLK_AXI_DEBUG);
- return 0;
-}
-
-static int edgetpu_axi_rate_set(void *data, u64 val)
-{
- unsigned long dbg_rate_req;
-
- dbg_rate_req = TPU_DEBUG_REQ | TPU_CLK_AXI_DEBUG;
- dbg_rate_req |= 1000;
-
- return exynos_acpm_set_rate(TPU_ACPM_DOMAIN, dbg_rate_req);
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_tpu_axi_rate, edgetpu_axi_rate_get,
- edgetpu_axi_rate_set, "%llu\n");
-
-static int edgetpu_apb_rate_get(void *data, u64 *val)
-{
- *val = exynos_acpm_get_rate(TPU_ACPM_DOMAIN,
- TPU_DEBUG_REQ | TPU_CLK_APB_DEBUG);
- return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_tpu_apb_rate, edgetpu_apb_rate_get, NULL,
- "%llu\n");
-
-static int edgetpu_uart_rate_get(void *data, u64 *val)
-{
- *val = exynos_acpm_get_rate(TPU_ACPM_DOMAIN,
- TPU_DEBUG_REQ | TPU_CLK_UART_DEBUG);
- return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_tpu_uart_rate, edgetpu_uart_rate_get, NULL,
- "%llu\n");
-
-static int edgetpu_vdd_int_m_set(void *data, u64 val)
-{
- struct device *dev = (struct device *)data;
- unsigned long dbg_rate_req;
-
- if (val > MAX_VOLTAGE_VAL) {
- dev_err(dev, "Preventing INT_M voltage > %duV",
- MAX_VOLTAGE_VAL);
- return -EINVAL;
- }
-
- dbg_rate_req = TPU_DEBUG_REQ | TPU_VDD_INT_M_DEBUG;
- dbg_rate_req |= val;
-
- return exynos_acpm_set_rate(TPU_ACPM_DOMAIN, dbg_rate_req);
-}
-
-static int edgetpu_vdd_int_m_get(void *data, u64 *val)
-{
- *val = exynos_acpm_get_rate(TPU_ACPM_DOMAIN,
- TPU_DEBUG_REQ | TPU_VDD_INT_M_DEBUG);
- return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_tpu_vdd_int_m, edgetpu_vdd_int_m_get,
- edgetpu_vdd_int_m_set, "%llu\n");
-
-static int edgetpu_vdd_tpu_set(void *data, u64 val)
-{
- int ret;
- struct device *dev = (struct device *)data;
- unsigned long dbg_rate_req;
-
- if (val > MAX_VOLTAGE_VAL) {
- dev_err(dev, "Preventing VDD_TPU voltage > %duV",
- MAX_VOLTAGE_VAL);
- return -EINVAL;
- }
-
- dbg_rate_req = TPU_DEBUG_REQ | TPU_VDD_TPU_DEBUG;
- dbg_rate_req |= val;
-
- ret = exynos_acpm_set_rate(TPU_ACPM_DOMAIN, dbg_rate_req);
- return ret;
-}
-
-static int edgetpu_vdd_tpu_get(void *data, u64 *val)
-{
- *val = exynos_acpm_get_rate(TPU_ACPM_DOMAIN,
- TPU_DEBUG_REQ | TPU_VDD_TPU_DEBUG);
- return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_tpu_vdd_tpu, edgetpu_vdd_tpu_get,
- edgetpu_vdd_tpu_set, "%llu\n");
-
-static int edgetpu_vdd_tpu_m_set(void *data, u64 val)
-{
- int ret;
- struct device *dev = (struct device *)data;
- unsigned long dbg_rate_req;
-
- if (val > MAX_VOLTAGE_VAL) {
- dev_err(dev, "Preventing VDD_TPU voltage > %duV",
- MAX_VOLTAGE_VAL);
- return -EINVAL;
- }
-
- dbg_rate_req = TPU_DEBUG_REQ | TPU_VDD_TPU_M_DEBUG;
- dbg_rate_req |= val;
-
- ret = exynos_acpm_set_rate(TPU_ACPM_DOMAIN, dbg_rate_req);
- return ret;
-}
-
-static int edgetpu_vdd_tpu_m_get(void *data, u64 *val)
-{
- *val = exynos_acpm_get_rate(TPU_ACPM_DOMAIN,
- TPU_DEBUG_REQ | TPU_VDD_TPU_M_DEBUG);
- return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_tpu_vdd_tpu_m, edgetpu_vdd_tpu_m_get,
- edgetpu_vdd_tpu_m_set, "%llu\n");
-
-static int abrolhos_core_pwr_get(void *data, u64 *val)
-{
- *val = exynos_acpm_get_rate(TPU_ACPM_DOMAIN,
- TPU_DEBUG_REQ | TPU_CORE_PWR_DEBUG);
- return 0;
-}
-
-static int abrolhos_core_pwr_set(void *data, u64 val)
-{
- int ret;
- unsigned long dbg_rate_req;
-
- dbg_rate_req = TPU_DEBUG_REQ | TPU_CORE_PWR_DEBUG;
- dbg_rate_req |= val;
-
- ret = exynos_acpm_set_rate(TPU_ACPM_DOMAIN, dbg_rate_req);
- return ret;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_tpu_core_pwr, abrolhos_core_pwr_get,
- abrolhos_core_pwr_set, "%llu\n");
-
-static int abrolhos_get_initial_pwr_state(struct device *dev)
-{
- switch (power_state) {
- case TPU_DEEP_SLEEP_CLOCKS_SLOW:
- case TPU_DEEP_SLEEP_CLOCKS_FAST:
- case TPU_RETENTION_CLOCKS_SLOW:
- case TPU_ACTIVE_SUD:
- case TPU_ACTIVE_UD:
- case TPU_ACTIVE_NOM:
- case TPU_ACTIVE_OD:
- dev_info(dev, "Initial power state: %d\n", power_state);
- break;
- case TPU_OFF:
- case TPU_DEEP_SLEEP_CLOCKS_OFF:
- case TPU_SLEEP_CLOCKS_OFF:
- dev_warn(dev, "Power state %d prevents control core booting",
- power_state);
- /* fall-thru */
- default:
- dev_warn(dev, "Power state %d is invalid\n", power_state);
- dev_warn(dev, "defaulting to active nominal\n");
- power_state = TPU_ACTIVE_NOM;
- break;
- }
- return power_state;
-}
-
-static void abrolhos_power_down(struct edgetpu_pm *etpm);
-
-static int abrolhos_power_up(struct edgetpu_pm *etpm)
-{
- struct edgetpu_dev *etdev = etpm->etdev;
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
- int ret = abrolhos_pwr_state_set(
- etpm->etdev, abrolhos_get_initial_pwr_state(etdev->dev));
- enum edgetpu_firmware_status firmware_status;
-
- etdev_info(etpm->etdev, "Powering up\n");
-
- if (ret)
- return ret;
-
- /* Clear out log / trace buffers */
- memset(abpdev->log_mem.vaddr, 0, EDGETPU_TELEMETRY_BUFFER_SIZE);
-#if IS_ENABLED(CONFIG_EDGETPU_TELEMETRY_TRACE)
- memset(abpdev->trace_mem.vaddr, 0, EDGETPU_TELEMETRY_BUFFER_SIZE);
-#endif
-
- edgetpu_chip_init(etdev);
-
- if (etdev->kci) {
- etdev_dbg(etdev, "Resetting KCI\n");
- edgetpu_kci_reinit(etdev->kci);
- }
- if (etdev->mailbox_manager) {
- etdev_dbg(etdev, "Resetting VII mailboxes\n");
- edgetpu_mailbox_reset_vii(etdev->mailbox_manager);
- }
-
- if (!etdev->firmware)
- return 0;
-
- firmware_status = edgetpu_firmware_status_locked(etdev);
- if (firmware_status == FW_LOADING)
- return 0;
-
- /* attempt firmware run */
- mutex_lock(&etdev->state_lock);
- if (etdev->state == ETDEV_STATE_FWLOADING) {
- mutex_unlock(&etdev->state_lock);
- return -EAGAIN;
- }
- etdev->state = ETDEV_STATE_FWLOADING;
- mutex_unlock(&etdev->state_lock);
- switch (firmware_status) {
- case FW_VALID:
- ret = edgetpu_firmware_restart_locked(etdev);
- break;
- case FW_INVALID:
- ret = edgetpu_firmware_run_locked(etdev->firmware,
- EDGETPU_DEFAULT_FIRMWARE_NAME,
- FW_DEFAULT);
- break;
- default:
- break;
- }
- mutex_lock(&etdev->state_lock);
- if (ret == -EIO)
- etdev->state = ETDEV_STATE_BAD; /* f/w handshake error */
- else if (ret)
- etdev->state = ETDEV_STATE_NOFW; /* other errors */
- else
- etdev->state = ETDEV_STATE_GOOD; /* f/w handshake success */
- mutex_unlock(&etdev->state_lock);
-
- if (ret) {
- abrolhos_power_down(etpm);
- } else {
- if (!abpdev->bcl_dev)
- abpdev->bcl_dev = gs101_retrieve_bcl_handle();
- if (abpdev->bcl_dev)
- gs101_init_tpu_ratio(abpdev->bcl_dev);
- }
-
- return ret;
-}
-
-static void
-abrolhos_pm_shutdown_firmware(struct abrolhos_platform_dev *etpdev,
- struct edgetpu_dev *etdev,
- struct abrolhos_platform_dev *abpdev)
-{
- if (!edgetpu_pchannel_power_down(etdev, false))
- return;
-
- etdev_warn(etdev, "Firmware shutdown request failed!\n");
- etdev_warn(etdev, "Attempting firmware restart\n");
-
- if (!edgetpu_firmware_restart_locked(etdev) &&
- !edgetpu_pchannel_power_down(etdev, false))
- return;
-
- edgetpu_kci_cancel_work_queues(etdev->kci);
- etdev_warn(etdev, "Forcing shutdown through power policy\n");
- /* Request GSA shutdown to make sure the R52 core is reset */
- gsa_send_tpu_cmd(etpdev->gsa_dev, GSA_TPU_SHUTDOWN);
- abrolhos_pwr_policy_set(abpdev, TPU_OFF);
- pm_runtime_put_sync(etdev->dev);
- /*
- * TODO: experiment on hardware to verify if this delay
- * is needed, what is a good value or an alternative way
- * to make sure the power policy request turned the
- * device off.
- */
- msleep(100);
- pm_runtime_get_sync(etdev->dev);
- abrolhos_pwr_policy_set(abpdev, TPU_ACTIVE_OD);
-}
-
-static void abrolhos_pm_cleanup_bts_scenario(struct edgetpu_dev *etdev)
-{
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
- struct abrolhos_platform_pwr *platform_pwr = &abpdev->platform_pwr;
- int performance_scenario = platform_pwr->performance_scenario;
-
- if (!performance_scenario)
- return;
-
- mutex_lock(&platform_pwr->scenario_lock);
- while (platform_pwr->scenario_count) {
- int ret = bts_del_scenario(performance_scenario);
-
- if (ret) {
- platform_pwr->scenario_count = 0;
- etdev_warn_once(
- etdev,
- "error %d in cleaning up BTS scenario %u\n",
- ret, performance_scenario);
- break;
- }
- platform_pwr->scenario_count--;
- }
- mutex_unlock(&platform_pwr->scenario_lock);
-}
-
-static void abrolhos_power_down(struct edgetpu_pm *etpm)
-{
- struct edgetpu_dev *etdev = etpm->etdev;
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
- struct abrolhos_platform_pwr *platform_pwr = &abpdev->platform_pwr;
- u64 val;
- int res;
- int min_state = platform_pwr->min_state;
-
- etdev_info(etdev, "Powering down\n");
-
- if (min_state >= TPU_DEEP_SLEEP_CLOCKS_SLOW) {
- etdev_info(etdev, "Power down skipped due to min state = %d\n",
- min_state);
- return;
- }
-
- if (abrolhos_pwr_state_get(etdev, &val)) {
- etdev_warn(etdev, "Failed to read current power state\n");
- val = TPU_ACTIVE_NOM;
- }
- if (val == TPU_OFF) {
- etdev_dbg(etdev, "Device already off, skipping shutdown\n");
- return;
- }
-
- if (etdev->kci && edgetpu_firmware_status_locked(etdev) == FW_VALID) {
- /* Update usage stats before we power off fw. */
- edgetpu_kci_update_usage_locked(etdev);
- abrolhos_pm_shutdown_firmware(abpdev, etdev, abpdev);
- edgetpu_kci_cancel_work_queues(etdev->kci);
- }
-
- res = gsa_send_tpu_cmd(abpdev->gsa_dev, GSA_TPU_SHUTDOWN);
- if (res < 0)
- etdev_warn(etdev, "GSA shutdown request failed (%d)\n", res);
- abrolhos_pwr_state_set(etdev, TPU_OFF);
-
- /* Remove our vote for INT/MIF state (if any) */
- exynos_pm_qos_update_request(&platform_pwr->int_min, 0);
- exynos_pm_qos_update_request(&platform_pwr->mif_min, 0);
-
- abrolhos_pm_cleanup_bts_scenario(etdev);
-}
-
-static int abrolhos_pm_after_create(struct edgetpu_pm *etpm)
-{
- int ret;
- struct edgetpu_dev *etdev = etpm->etdev;
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
- struct device *dev = etdev->dev;
- struct abrolhos_platform_pwr *platform_pwr = &abpdev->platform_pwr;
-
- ret = abrolhos_pwr_state_init(dev);
- if (ret)
- return ret;
-
- mutex_init(&platform_pwr->policy_lock);
- mutex_init(&platform_pwr->state_lock);
- mutex_init(&platform_pwr->scenario_lock);
-
- exynos_pm_qos_add_request(&platform_pwr->int_min,
- PM_QOS_DEVICE_THROUGHPUT, 0);
- exynos_pm_qos_add_request(&platform_pwr->mif_min, PM_QOS_BUS_THROUGHPUT,
- 0);
-
- platform_pwr->performance_scenario =
- bts_get_scenindex("tpu_performance");
- if (!platform_pwr->performance_scenario)
- etdev_warn(etdev, "tpu_performance BTS scenario not found\n");
- platform_pwr->scenario_count = 0;
-
- ret = abrolhos_pwr_state_set(etdev,
- abrolhos_get_initial_pwr_state(dev));
- if (ret)
- return ret;
- abrolhos_pwr_debugfs_dir =
- debugfs_create_dir("power", edgetpu_fs_debugfs_dir());
- if (!abrolhos_pwr_debugfs_dir) {
- etdev_warn(etdev, "Failed to create debug FS power");
- /* don't fail the procedure on debug FS creation fails */
- return 0;
- }
- debugfs_create_file("state", 0660, abrolhos_pwr_debugfs_dir, etdev,
- &fops_tpu_pwr_state);
- debugfs_create_file("min_state", 0660, abrolhos_pwr_debugfs_dir, etdev,
- &fops_tpu_min_pwr_state);
- debugfs_create_file("vdd_tpu", 0660, abrolhos_pwr_debugfs_dir, dev,
- &fops_tpu_vdd_tpu);
- debugfs_create_file("vdd_tpu_m", 0660, abrolhos_pwr_debugfs_dir, dev,
- &fops_tpu_vdd_tpu_m);
- debugfs_create_file("vdd_int_m", 0660, abrolhos_pwr_debugfs_dir, dev,
- &fops_tpu_vdd_int_m);
- debugfs_create_file("core_rate", 0660, abrolhos_pwr_debugfs_dir, dev,
- &fops_tpu_core_rate);
- debugfs_create_file("ctl_rate", 0660, abrolhos_pwr_debugfs_dir, dev,
- &fops_tpu_ctl_rate);
- debugfs_create_file("axi_rate", 0660, abrolhos_pwr_debugfs_dir, dev,
- &fops_tpu_axi_rate);
- debugfs_create_file("apb_rate", 0440, abrolhos_pwr_debugfs_dir, dev,
- &fops_tpu_apb_rate);
- debugfs_create_file("uart_rate", 0440, abrolhos_pwr_debugfs_dir, dev,
- &fops_tpu_uart_rate);
- debugfs_create_file("policy", 0660, abrolhos_pwr_debugfs_dir,
- abpdev, &fops_tpu_pwr_policy);
- debugfs_create_file("core_pwr", 0660, abrolhos_pwr_debugfs_dir,
- abpdev, &fops_tpu_core_pwr);
-
- return 0;
-}
-
-static void abrolhos_pm_before_destroy(struct edgetpu_pm *etpm)
-{
- struct edgetpu_dev *etdev = etpm->etdev;
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
- struct abrolhos_platform_pwr *platform_pwr = &abpdev->platform_pwr;
-
- debugfs_remove_recursive(abrolhos_pwr_debugfs_dir);
- pm_runtime_disable(etpm->etdev->dev);
- abrolhos_pm_cleanup_bts_scenario(etdev);
- exynos_pm_qos_remove_request(&platform_pwr->int_min);
- exynos_pm_qos_remove_request(&platform_pwr->mif_min);
-}
-
-static struct edgetpu_pm_handlers abrolhos_pm_handlers = {
- .after_create = abrolhos_pm_after_create,
- .before_destroy = abrolhos_pm_before_destroy,
- .power_up = abrolhos_power_up,
- .power_down = abrolhos_power_down,
-};
-
-int abrolhos_pm_create(struct edgetpu_dev *etdev)
-{
- return edgetpu_pm_create(etdev, &abrolhos_pm_handlers);
-}
-
-void abrolhos_pm_destroy(struct edgetpu_dev *etdev)
-{
- edgetpu_pm_destroy(etdev);
-}
-
-void abrolhos_pm_set_pm_qos(struct edgetpu_dev *etdev, u32 pm_qos_val)
-{
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
- struct abrolhos_platform_pwr *platform_pwr = &abpdev->platform_pwr;
- s32 int_val = (pm_qos_val >> PM_QOS_INT_SHIFT) * PM_QOS_FACTOR;
- s32 mif_val = (pm_qos_val & PM_QOS_MIF_MASK) * PM_QOS_FACTOR;
-
- etdev_dbg(etdev, "%s: pm_qos request - int = %d mif = %d\n", __func__,
- int_val, mif_val);
-
- exynos_pm_qos_update_request(&platform_pwr->int_min, int_val);
- exynos_pm_qos_update_request(&platform_pwr->mif_min, mif_val);
-}
-
-static void abrolhos_pm_activate_bts_scenario(struct edgetpu_dev *etdev)
-{
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
- struct abrolhos_platform_pwr *platform_pwr = &abpdev->platform_pwr;
- int performance_scenario = platform_pwr->performance_scenario;
-
- /* bts_add_scenario() keeps track of reference count internally.*/
- int ret;
-
- if (!performance_scenario)
- return;
- mutex_lock(&platform_pwr->scenario_lock);
- ret = bts_add_scenario(performance_scenario);
- if (ret)
- etdev_warn_once(etdev, "error %d adding BTS scenario %u\n", ret,
- performance_scenario);
- else
- platform_pwr->scenario_count++;
-
- etdev_dbg(etdev, "BTS Scenario activated: %d\n",
- platform_pwr->scenario_count);
- mutex_unlock(&platform_pwr->scenario_lock);
-}
-
-static void abrolhos_pm_deactivate_bts_scenario(struct edgetpu_dev *etdev)
-{
- /* bts_del_scenario() keeps track of reference count internally.*/
- int ret;
- struct abrolhos_platform_dev *abpdev = to_abrolhos_dev(etdev);
- struct abrolhos_platform_pwr *platform_pwr = &abpdev->platform_pwr;
- int performance_scenario = platform_pwr->performance_scenario;
-
- if (!performance_scenario)
- return;
- mutex_lock(&platform_pwr->scenario_lock);
- if (!platform_pwr->scenario_count) {
- etdev_warn(etdev, "Unbalanced bts deactivate\n");
- mutex_unlock(&platform_pwr->scenario_lock);
- return;
- }
- ret = bts_del_scenario(performance_scenario);
- if (ret)
- etdev_warn_once(etdev, "error %d deleting BTS scenario %u\n",
- ret, performance_scenario);
- else
- platform_pwr->scenario_count--;
-
- etdev_dbg(etdev, "BTS Scenario deactivated: %d\n",
- platform_pwr->scenario_count);
- mutex_unlock(&platform_pwr->scenario_lock);
-}
-
-void abrolhos_pm_set_bts(struct edgetpu_dev *etdev, u32 bts_val)
-{
- etdev_dbg(etdev, "%s: bts request - val = %u\n", __func__, bts_val);
-
- switch (bts_val) {
- case 0:
- abrolhos_pm_deactivate_bts_scenario(etdev);
- break;
- case 1:
- abrolhos_pm_activate_bts_scenario(etdev);
- break;
- default:
- etdev_warn(etdev, "%s: invalid BTS request value: %u\n",
- __func__, bts_val);
- break;
- }
-}
diff --git a/drivers/edgetpu/abrolhos-pm.h b/drivers/edgetpu/abrolhos-pm.h
deleted file mode 100644
index bf0128f..0000000
--- a/drivers/edgetpu/abrolhos-pm.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Power management header for Abrolhos.
- *
- * Copyright (C) 2020 Google, Inc.
- */
-#ifndef __ABROLHOS_PM_H__
-#define __ABROLHOS_PM_H__
-
-#include "edgetpu-kci.h"
-#include "edgetpu-internal.h"
-
-/* Can't build out of tree with acpm_dvfs unless kernel supports ACPM */
-#if IS_ENABLED(CONFIG_ACPM_DVFS)
-
-#include <linux/acpm_dvfs.h>
-
-#else
-
-static unsigned long exynos_acpm_rate;
-static inline int exynos_acpm_set_rate(unsigned int id, unsigned long rate)
-{
- exynos_acpm_rate = rate;
- return 0;
-}
-static inline int exynos_acpm_set_init_freq(unsigned int dfs_id,
- unsigned long freq)
-{
- return 0;
-}
-static inline unsigned long exynos_acpm_get_rate(unsigned int id,
- unsigned long dbg_val)
-{
- return exynos_acpm_rate;
-}
-static inline int exynos_acpm_set_policy(unsigned int id, unsigned long policy)
-{
- return 0;
-}
-#endif /* IS_ENABLED(CONFIG_ACPM_DVFS) */
-
-/*
- * TPU Power States:
- * 0: Off
- * 1: Deep Sleep Clocks Off
- * 2: Deep Sleep Clocks Slow
- * 3: Deep Sleep Clocks Fast
- * 4: Sleep Clocks Off
- * 5: Sleep Clocks Slow
- * 6: Retention Clocks Slow
- * 500000: Super Underdrive @500MHz
- * 800000: Underdrive @800MHz
- * 1000000: Nominal @1066MHz
- * 1200000: Overdrive @1230MHz
- */
-enum tpu_pwr_state {
- TPU_OFF = 0,
- TPU_DEEP_SLEEP_CLOCKS_OFF = 1,
- TPU_DEEP_SLEEP_CLOCKS_SLOW = 2,
- TPU_DEEP_SLEEP_CLOCKS_FAST = 3,
- TPU_SLEEP_CLOCKS_OFF = 4,
- TPU_SLEEP_CLOCKS_SLOW = 5,
- TPU_RETENTION_CLOCKS_SLOW = 6,
- TPU_ACTIVE_SUD = 500000,
- TPU_ACTIVE_UD = 800000,
- TPU_ACTIVE_NOM = 1066000,
- TPU_ACTIVE_OD = 1230000,
-};
-
-/*
- * Request codes from firmware
- * Values must match with firmware code base
- */
-enum abrolhos_reverse_kci_code {
- RKCI_CODE_PM_QOS = RKCI_CHIP_CODE_FIRST + 1,
- RKCI_CODE_BTS = RKCI_CHIP_CODE_FIRST + 2,
-};
-
-#define TPU_POLICY_MAX TPU_ACTIVE_OD
-
-#define TPU_ACPM_DOMAIN 7
-
-#define TPU_DEBUG_REQ (1 << 31)
-#define TPU_VDD_TPU_DEBUG (0 << 27)
-#define TPU_VDD_TPU_M_DEBUG (1 << 27)
-#define TPU_VDD_INT_M_DEBUG (2 << 27)
-#define TPU_CLK_CORE_DEBUG (3 << 27)
-#define TPU_CLK_CTL_DEBUG (4 << 27)
-#define TPU_CLK_AXI_DEBUG (5 << 27)
-#define TPU_CLK_APB_DEBUG (6 << 27)
-#define TPU_CLK_UART_DEBUG (7 << 27)
-#define TPU_CORE_PWR_DEBUG (8 << 27)
-#define TPU_DEBUG_VALUE_MASK ((1 << 27) - 1)
-
-#define OSCCLK_RATE 24576
-#define PLL_SHARED0_DIV0 1066000
-#define PLL_SHARED1_DIV2 933000
-#define PLL_SHARED2 800000
-#define PLL_SHARED3 666000
-#define PLL_SHARED0_DIV3 711000
-#define PLL_SHARED1_DIV3 622000
-#define PLL_SHARED0_DIV4 533000
-#define PLL_SHARED2_DIV2 400000
-#define PLL_SHARED3_DIV2 333000
-
-#define TPU_CMU_TOP_REG 0x1E080000
-#define MUX_CLKCMU_TPU_TPU (TPU_CMU_TPU_REG + 0x10FC)
-#define DIV_CLKCMU_TPU_TPU (TPU_CMU_TPU_REG + 0x18EC)
-
-#define MUX_CLKCMU_TPU_TPUCTL (TPU_CMU_TPU_REG + 0x1100)
-#define DIV_CLKCMU_TPU_TPUCTL (TPU_CMU_TPU_REG + 0x18F0)
-
-#define MUX_CLKCMU_TPU_BUS (TPU_CMU_TPU_REG + 0x10F8)
-#define DIV_CLKCMU_TPU_BUS (TPU_CMU_TPU_REG + 0x18E8)
-
-#define MUX_CLKCMU_TPU_UART (TPU_CMU_TPU_REG + 0x1104)
-#define DIV_CLKCMU_TPU_UART (TPU_CMU_TPU_REG + 0x18F4)
-
-#define TPU_CMU_TPU_REG 0x1CC00000
-
-#define PLL_CON0_PLL_TPU (TPU_CMU_TPU_REG + 0x0100)
-#define PLL_CON2_PLL_TPU (TPU_CMU_TPU_REG + 0x0108)
-#define MUX_CLK_TPU_TPU (TPU_CMU_TPU_REG + 0x1000)
-#define MUX_CLKCMU_TPU_TPU_USER (TPU_CMU_TPU_REG + 0x0620)
-#define DIV_CLK_TPU_TPU (TPU_CMU_TPU_REG + 0x1804)
-
-#define MUX_CLK_TPU_TPUCTL (TPU_CMU_TPU_REG + 0x1004)
-#define MUX_CLKCMU_TPU_TPUCTL_USER (TPU_CMU_TPU_REG + 0x0610)
-#define DIV_CLK_TPU_TPUCTL (TPU_CMU_TPU_REG + 0x1808)
-
-#define MUX_CLKCMU_TPU_BUS_USER (TPU_CMU_TPU_REG + 0x0600)
-
-#define DIV_CLK_TPU_BUSP (TPU_CMU_TPU_REG + 0x1800)
-
-#define MUX_CLKCMU_TPU_UART_USER (TPU_CMU_TPU_REG + 0x0630)
-
-#define MUX_USER_SEL_MASK 0x1
-#define MUX_USER_OSCCLK_SEL 0
-#define MUX_USER_CMUCLK_SEL 1
-
-#define MUX_CMU_SEL_MASK 0x7
-#define MUX_CMU_S0_D0_SEL 0
-#define MUX_CMU_S1_D2_SEL 1
-#define MUX_CMU_S2_SEL 2
-#define MUX_CMU_S3_SEL 3
-#define MUX_CMU_S0_D3_SEL 4
-#define MUX_CMU_S1_D3_SEL 5
-#define MUX_CMU_S0_D4_SEL 6
-
-#define MUX_CMU_UART_SEL_MASK 0x3
-#define MUX_CMU_UART_S0_D4_SEL 0
-#define MUX_CMU_UART_S2_D2_SEL 1
-#define MUX_CMU_UART_S3_D2_SEL 2
-
-#define DIV_CMU_RATIO_MASK 0xf
-#define DIV_USER_RATIO_MASK 0x7
-
-int abrolhos_pm_create(struct edgetpu_dev *etdev);
-
-void abrolhos_pm_destroy(struct edgetpu_dev *etdev);
-
-void abrolhos_pm_set_pm_qos(struct edgetpu_dev *etdev, u32 pm_qos_val);
-
-void abrolhos_pm_set_bts(struct edgetpu_dev *etdev, u32 bts_val);
-
-#endif /* __ABROLHOS_PM_H__ */
diff --git a/drivers/edgetpu/abrolhos-thermal.c b/drivers/edgetpu/abrolhos-thermal.c
deleted file mode 100644
index 27429a9..0000000
--- a/drivers/edgetpu/abrolhos-thermal.c
+++ /dev/null
@@ -1,328 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * EdgeTPU thermal driver for Abrolhos.
- *
- * Copyright (C) 2020 Google, Inc.
- */
-
-#include <linux/debugfs.h>
-#include <linux/device.h>
-#include <linux/gfp.h>
-#include <linux/kernel.h>
-#include <linux/mutex.h>
-#include <linux/pm_runtime.h>
-#include <linux/slab.h>
-#include <linux/thermal.h>
-#include <linux/version.h>
-#include <linux/of.h>
-
-#include "abrolhos-platform.h"
-#include "abrolhos-pm.h"
-#include "edgetpu-config.h"
-#include "edgetpu-internal.h"
-#include "edgetpu-mmu.h"
-#include "edgetpu-thermal.h"
-
-#define MAX_NUM_TPU_STATES 10
-#define OF_DATA_NUM_MAX MAX_NUM_TPU_STATES * 2
-static struct edgetpu_state_pwr state_pwr_map[MAX_NUM_TPU_STATES] = {0};
-
-static int edgetpu_get_max_state(struct thermal_cooling_device *cdev,
- unsigned long *state)
-{
- struct edgetpu_thermal *thermal = cdev->devdata;
-
- if (thermal->tpu_num_states <= 0)
- return -ENOSYS;
-
- *state = thermal->tpu_num_states - 1;
- return 0;
-}
-
-/*
- * Set cooling state.
- */
-static int edgetpu_set_cur_state(struct thermal_cooling_device *cdev,
- unsigned long state_original)
-{
- int ret;
- struct edgetpu_thermal *cooling = cdev->devdata;
- struct device *dev = cooling->dev;
- unsigned long pwr_state;
-
- if (state_original >= cooling->tpu_num_states) {
- dev_err(dev, "%s: invalid cooling state %lu\n", __func__,
- state_original);
- return -EINVAL;
- }
-
- mutex_lock(&cooling->lock);
- pwr_state = state_pwr_map[state_original].state;
- if (state_original != cooling->cooling_state) {
- /*
- * Cap the minimum state we request here.
- * We cannot go to states below SUD until firmware/runtime
- * handshake is added.
- */
- if (pwr_state < TPU_ACTIVE_SUD) {
- dev_warn_ratelimited(
- dev, "Unable to go to state %lu, going to %d",
- pwr_state, TPU_ACTIVE_SUD);
- pwr_state = TPU_ACTIVE_SUD;
- }
-
- ret = exynos_acpm_set_policy(TPU_ACPM_DOMAIN, pwr_state);
- if (ret) {
- dev_err(dev, "error setting tpu policy: %d\n", ret);
- goto out;
- }
- cooling->cooling_state = state_original;
- } else {
- ret = -EALREADY;
- }
-
-out:
- mutex_unlock(&cooling->lock);
- return ret;
-}
-
-static int edgetpu_get_cur_state(struct thermal_cooling_device *cdev,
- unsigned long *state)
-{
- int ret = 0;
- struct edgetpu_thermal *cooling = cdev->devdata;
-
- *state = cooling->cooling_state;
- if (*state >= cooling->tpu_num_states) {
- dev_warn(cooling->dev,
- "Unknown cooling state: %lu, resetting\n", *state);
- mutex_lock(&cooling->lock);
-
- ret = exynos_acpm_set_policy(TPU_ACPM_DOMAIN, TPU_ACTIVE_OD);
- if (ret) {
- dev_err(cooling->dev, "error setting tpu policy: %d\n",
- ret);
- mutex_unlock(&cooling->lock);
- return ret;
- }
-
- //setting back to "no cooling"
- cooling->cooling_state = 0;
- mutex_unlock(&cooling->lock);
- }
-
- return 0;
-}
-
-static int edgetpu_state2power_internal(unsigned long state, u32 *power,
- struct edgetpu_thermal *thermal)
-{
- int i;
-
- for (i = 0; i < thermal->tpu_num_states; ++i) {
- if (state == state_pwr_map[i].state) {
- *power = state_pwr_map[i].power;
- return 0;
- }
- }
- dev_err(thermal->dev, "Unknown state req for: %lu\n", state);
- *power = 0;
- return -EINVAL;
-}
-
-static int edgetpu_get_requested_power(struct thermal_cooling_device *cdev,
-#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)
- struct thermal_zone_device *tz,
-#endif
- u32 *power)
-{
- unsigned long state_original;
- struct edgetpu_thermal *cooling = cdev->devdata;
-
- state_original = exynos_acpm_get_rate(TPU_ACPM_DOMAIN, 0);
- return edgetpu_state2power_internal(state_original, power,
- cooling);
-}
-
-static int edgetpu_state2power(struct thermal_cooling_device *cdev,
-#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)
- struct thermal_zone_device *tz,
-#endif
- unsigned long state, u32 *power)
-{
- struct edgetpu_thermal *cooling = cdev->devdata;
-
- if (state >= cooling->tpu_num_states) {
- dev_err(cooling->dev, "%s: invalid state: %lu\n", __func__,
- state);
- return -EINVAL;
- }
-
- return edgetpu_state2power_internal(state_pwr_map[state].state, power,
- cooling);
-}
-
-static int edgetpu_power2state(struct thermal_cooling_device *cdev,
-#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)
- struct thermal_zone_device *tz,
-#endif
- u32 power, unsigned long *state)
-{
- int i, penultimate_throttle_state;
- struct edgetpu_thermal *thermal = cdev->devdata;
-
- *state = 0;
- if (thermal->tpu_num_states < 2)
- return thermal->tpu_num_states == 1 ? 0 : -ENOSYS;
-
- penultimate_throttle_state = thermal->tpu_num_states - 2;
- /*
- * argument "power" is the maximum allowed power consumption in mW as
- * defined by the PID control loop. Check for the first state that is
- * less than or equal to the current allowed power. state_pwr_map is
- * descending, so lowest power consumption is last value in the array
- * return lowest state even if it consumes more power than allowed as
- * not all platforms can handle throttling below an active state
- */
- for (i = penultimate_throttle_state; i >= 0; --i) {
- if (power < state_pwr_map[i].power) {
- *state = i + 1;
- break;
- }
- }
- return 0;
-}
-
-static struct thermal_cooling_device_ops edgetpu_cooling_ops = {
- .get_max_state = edgetpu_get_max_state,
- .get_cur_state = edgetpu_get_cur_state,
- .set_cur_state = edgetpu_set_cur_state,
- .get_requested_power = edgetpu_get_requested_power,
- .state2power = edgetpu_state2power,
- .power2state = edgetpu_power2state,
-};
-
-static void tpu_thermal_exit_cooling(struct edgetpu_thermal *thermal)
-{
- if (!IS_ERR_OR_NULL(thermal->cdev))
- thermal_cooling_device_unregister(thermal->cdev);
-}
-
-static void tpu_thermal_exit(struct edgetpu_thermal *thermal)
-{
- tpu_thermal_exit_cooling(thermal);
- debugfs_remove_recursive(thermal->cooling_root);
-}
-
-static void devm_tpu_thermal_release(struct device *dev, void *res)
-{
- struct edgetpu_thermal *thermal = res;
-
- tpu_thermal_exit(thermal);
-}
-
-static int tpu_thermal_parse_dvfs_table(struct edgetpu_thermal *thermal)
-{
- int row_size, col_size, tbl_size, i;
- int of_data_int_array[OF_DATA_NUM_MAX];
-
- if (of_property_read_u32_array(thermal->dev->of_node,
- "tpu_dvfs_table_size", of_data_int_array, 2 ))
- goto error;
-
- row_size = of_data_int_array[0];
- col_size = of_data_int_array[1];
- tbl_size = row_size * col_size;
- if (row_size > MAX_NUM_TPU_STATES) {
- dev_err(thermal->dev, "too many TPU states\n");
- goto error;
- }
-
- if (tbl_size > OF_DATA_NUM_MAX)
- goto error;
-
- if (of_property_read_u32_array(thermal->dev->of_node,
- "tpu_dvfs_table", of_data_int_array, tbl_size))
- goto error;
-
- thermal->tpu_num_states = row_size;
- for (i = 0; i < row_size; ++i) {
- int idx = col_size * i;
- state_pwr_map[i].state = of_data_int_array[idx];
- state_pwr_map[i].power = of_data_int_array[idx+1];
- }
-
- return 0;
-
-error:
- dev_err(thermal->dev, "failed to parse DVFS table\n");
- return -EINVAL;
-}
-
-static int
-tpu_thermal_cooling_register(struct edgetpu_thermal *thermal, char *type)
-{
- struct device_node *cooling_node = NULL;
- int err = 0;
-
- thermal->op_data = NULL;
- thermal->tpu_num_states = 0;
-
- err = tpu_thermal_parse_dvfs_table(thermal);
- if (err)
- return err;
-
- mutex_init(&thermal->lock);
- cooling_node = of_find_node_by_name(NULL, "tpu-cooling");
- if (!cooling_node)
- dev_warn(thermal->dev, "failed to find cooling node\n");
- // Initialize the cooling state as 0, means "no cooling"
- thermal->cooling_state = 0;
- thermal->cdev = thermal_of_cooling_device_register(
- cooling_node, type, thermal, &edgetpu_cooling_ops);
- if (IS_ERR(thermal->cdev))
- return PTR_ERR(thermal->cdev);
- return 0;
-}
-
-static int tpu_thermal_init(struct edgetpu_thermal *thermal, struct device *dev)
-{
- int err;
- struct dentry *d;
-
- d = debugfs_create_dir("cooling", edgetpu_fs_debugfs_dir());
- /* don't let debugfs creation failure abort the init procedure */
- if (!d)
- dev_warn(dev, "failed to create debug fs for cooling");
- thermal->dev = dev;
- thermal->cooling_root = d;
-
- err = tpu_thermal_cooling_register(thermal, EDGETPU_COOLING_NAME);
- if (err) {
- dev_err(dev, "failed to initialize external cooling\n");
- tpu_thermal_exit(thermal);
- return err;
- }
-
- return 0;
-}
-
-struct edgetpu_thermal *devm_tpu_thermal_create(struct device *dev)
-{
- struct edgetpu_thermal *thermal;
- int err;
-
- thermal = devres_alloc(devm_tpu_thermal_release, sizeof(*thermal),
- GFP_KERNEL);
- if (!thermal)
- return ERR_PTR(-ENOMEM);
-
- err = tpu_thermal_init(thermal, dev);
- if (err) {
- devres_free(thermal);
- return ERR_PTR(err);
- }
-
- devres_add(dev, thermal);
- return thermal;
-}
diff --git a/drivers/edgetpu/abrolhos-usage-stats.c b/drivers/edgetpu/abrolhos-usage-stats.c
deleted file mode 100644
index 1fd1fc2..0000000
--- a/drivers/edgetpu/abrolhos-usage-stats.c
+++ /dev/null
@@ -1,2 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include "edgetpu-usage-stats.c"
diff --git a/drivers/edgetpu/abrolhos-wakelock.c b/drivers/edgetpu/abrolhos-wakelock.c
deleted file mode 100644
index ab61fb2..0000000
--- a/drivers/edgetpu/abrolhos-wakelock.c
+++ /dev/null
@@ -1,2 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include "edgetpu-wakelock.c"
diff --git a/drivers/edgetpu/abrolhos/config-mailbox.h b/drivers/edgetpu/abrolhos/config-mailbox.h
deleted file mode 100644
index 7ec0ee6..0000000
--- a/drivers/edgetpu/abrolhos/config-mailbox.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Chip-dependent configuration for mailbox.
- *
- * Copyright (C) 2019 Google, Inc.
- */
-
-#ifndef __ABROLHOS_CONFIG_MAILBOX_H__
-#define __ABROLHOS_CONFIG_MAILBOX_H__
-
-#include <linux/types.h> /* u32 */
-
-#define EDGETPU_NUM_MAILBOXES 8
-#define EDGETPU_NUM_VII_MAILBOXES (EDGETPU_NUM_MAILBOXES - 1)
-#define EDGETPU_NUM_P2P_MAILBOXES 0
-
-#define ABROLHOS_CSR_MBOX2_CONTEXT_ENABLE 0xe0000
-#define ABROLHOS_CSR_MBOX2_CMD_QUEUE_DOORBELL_SET 0xe1000
-#define ABROLHOS_CSR_MBOX2_RESP_QUEUE_DOORBELL_SET 0xe1800
-#define EDGETPU_MBOX_CSRS_SIZE 0x2000 /* CSR size of each mailbox */
-
-#define EDGETPU_MBOX_BASE ABROLHOS_CSR_MBOX2_CONTEXT_ENABLE
-
-/* CSR storing mailbox response queue doorbell status */
-#define HOST_NONSECURE_INT_SRC_STATUS_REG 0x000f0000
-#define HOST_NONSECURE_INT_SRC_CLEAR_REG 0x000f0008
-
-static inline u32 edgetpu_mailbox_get_context_csr_base(u32 index)
-{
- return ABROLHOS_CSR_MBOX2_CONTEXT_ENABLE +
- index * EDGETPU_MBOX_CSRS_SIZE;
-}
-
-static inline u32 edgetpu_mailbox_get_cmd_queue_csr_base(u32 index)
-{
- return ABROLHOS_CSR_MBOX2_CMD_QUEUE_DOORBELL_SET +
- index * EDGETPU_MBOX_CSRS_SIZE;
-}
-
-static inline u32 edgetpu_mailbox_get_resp_queue_csr_base(u32 index)
-{
- return ABROLHOS_CSR_MBOX2_RESP_QUEUE_DOORBELL_SET +
- index * EDGETPU_MBOX_CSRS_SIZE;
-}
-
-#endif /* __ABROLHOS_CONFIG_MAILBOX_H__ */
diff --git a/drivers/edgetpu/abrolhos/config-tpu-cpu.h b/drivers/edgetpu/abrolhos/config-tpu-cpu.h
deleted file mode 100644
index 123dc57..0000000
--- a/drivers/edgetpu/abrolhos/config-tpu-cpu.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Chip-dependent configuration for TPU CPU.
- *
- * Copyright (C) 2019 Google, Inc.
- */
-
-#ifndef __ABROLHOS_CONFIG_TPU_CPU_H__
-#define __ABROLHOS_CONFIG_TPU_CPU_H__
-
-#define EDGETPU_REG_RESET_CONTROL 0x90010
-#define CPUPORESET (1 << 1)
-
-#define EDGETPU_REG_INSTRUCTION_REMAP_CONTROL 0x90050
-#define EDGETPU_REG_INSTRUCTION_REMAP_BASE 0x90058
-#define EDGETPU_REG_INSTRUCTION_REMAP_LIMIT 0x90060
-#define EDGETPU_REG_INSTRUCTION_REMAP_NEW_BASE 0x90068
-#define EDGETPU_REG_INSTRUCTION_REMAP_SECURITY 0x90070
-#define EDGETPU_REG_SECURITY 0x90048
-
-/* Power Control signals for P-channel interface. */
-#define EDGETPU_REG_POWER_CONTROL 0xA0008
-#define PSTATE_SHIFT 0
-#define PSTATE (1 << PSTATE_SHIFT)
-#define PREQ (1 << 1)
-#define PDENY (1 << 2)
-#define PACCEPT (1 << 3)
-#define PACTIVE (1 << 5)
-
-#endif /* __ABROLHOS_CONFIG_TPU_CPU_H__ */
diff --git a/drivers/edgetpu/abrolhos/config.h b/drivers/edgetpu/abrolhos/config.h
deleted file mode 100644
index f6397fd..0000000
--- a/drivers/edgetpu/abrolhos/config.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Include all configuration files for Abrolhos.
- *
- * Copyright (C) 2019 Google, Inc.
- */
-
-#ifndef __ABROLHOS_CONFIG_H__
-#define __ABROLHOS_CONFIG_H__
-
-#define DRIVER_NAME "abrolhos"
-
-#define EDGETPU_DEV_MAX 1
-
-#define EDGETPU_HAS_MULTI_GROUPS
-
-#define EDGETPU_HAS_WAKELOCK
-
-/*
- * A remapped data region is available. This will be accessible by the R52
- * regardless of active context and is typically used for logging buffer and
- * non-secure mailbox queues.
- */
-#define EDGETPU_HAS_REMAPPED_DATA
-
-/*
- * The TPU VA where the firmware is located.
- *
- * The address is chosen to not overlap with any memory region specified in the
- * firmware's linker file.
- */
-#define FW_IOVA 0x16000000u
-/*
- * Size of the area in remapped DRAM reserved for firmware code and internal
- * data. This must match the firmware's linker file.
- */
-#define EDGETPU_FW_SIZE_MAX 0x100000
-
-/* Data in remapped DRAM starts after firmware code and internal data */
-#define EDGETPU_REMAPPED_DATA_OFFSET EDGETPU_FW_SIZE_MAX
-
-/*
- * Size of remapped DRAM data region. This must match the firmware's linker
- * file
- */
-#define EDGETPU_REMAPPED_DATA_SIZE 0x100000
-
-/*
- * Instruction remap registers make carveout memory appear at address
- * 0x10000000 from the R52 perspective
- */
-#define EDGETPU_INSTRUCTION_REMAP_BASE 0x10000000
-
-/* Address from which the R52 can access data in the remapped region */
-#define EDGETPU_REMAPPED_DATA_ADDR \
- (EDGETPU_INSTRUCTION_REMAP_BASE + EDGETPU_REMAPPED_DATA_OFFSET)
-
-/*
- * Size of memory for FW accessible debug dump segments
- */
-#define EDGETPU_DEBUG_DUMP_MEM_SIZE 0x4E0000
-
-#include "config-mailbox.h"
-#include "config-tpu-cpu.h"
-#include "csrs.h"
-
-#endif /* __ABROLHOS_CONFIG_H__ */
diff --git a/drivers/edgetpu/abrolhos/csrs.h b/drivers/edgetpu/abrolhos/csrs.h
deleted file mode 100644
index 1bf69c7..0000000
--- a/drivers/edgetpu/abrolhos/csrs.h
+++ /dev/null
@@ -1,36 +0,0 @@
-enum edgetpu_csrs {
- EDGETPU_REG_TILECONF1_DEEPSLEEP = 0x42028,
- EDGETPU_REG_TILECONF1_ERROR_TILE = 0x42520,
- EDGETPU_REG_TILECONF1_ERROR_MASK_TILE = 0x42528,
- EDGETPU_REG_TILECONF1_ERROR_INFO_TILE = 0x42540,
-
- EDGETPU_REG_SC_RUNCTRL = 0x44018,
- EDGETPU_REG_SC_CURRENTPC = 0x44028,
- EDGETPU_REG_SC_DECODEPC = 0x44030,
- EDGETPU_REG_SC_RUNSTATUS = 0x44398,
- EDGETPU_REG_SC_ERROR = 0x44440,
- EDGETPU_REG_SC_ERROR_MASK = 0x44448,
- EDGETPU_REG_SC_ERROR_INFO = 0x44460,
-
- EDGETPU_REG_USER_HIB_OUT_ACTVQ_INT_STAT = 0x48060,
- EDGETPU_REG_USER_HIB_INSTRQ_TAIL = 0x480A8,
- EDGETPU_REG_USER_HIB_INSTRQ_INT_STAT = 0x480C8,
- EDGETPU_REG_USER_HIB_IN_ACTVQ_INT_STAT = 0x48130,
- EDGETPU_REG_USER_HIB_PARAMQ_INT_STAT = 0x48198,
- EDGETPU_REG_USER_HIB_SC_HOST_INT_STAT = 0x481A8,
- EDGETPU_REG_USER_HIB_TOPLVL_INT_STAT = 0x481B8,
- EDGETPU_REG_USER_HIB_FATALERR_INT_STAT = 0x481C8,
- EDGETPU_REG_USER_HIB_DMA_PAUSE = 0x481D8,
- EDGETPU_REG_USER_HIB_DMA_PAUSED = 0x481E0,
- EDGETPU_REG_USER_HIB_ERROR_STATUS = 0x48C20,
- EDGETPU_REG_USER_HIB_ERROR_MASK = 0x48C28,
- EDGETPU_REG_USER_HIB_FIRST_ERROR_STATUS = 0x48C08,
- EDGETPU_REG_USER_HIB_TILECONFIG1 = 0x48268,
- EDGETPU_REG_USER_HIB_SNAPSHOT = 0x48240,
-
- EDGETPU_REG_AON_RESET = 0x60000,
- EDGETPU_REG_AON_CLOCK_ENABLE = 0x60008,
- EDGETPU_REG_AON_FORCE_QUIESCE = 0x60010,
-
- EDGETPU_REG_CPUNS_TIMESTAMP = 0xa00e0,
-};