1 // Copyright 2018 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "sherlock.h"
6
7 #include <ddk/debug.h>
8 #include <ddk/platform-defs.h>
9 #include <hw/reg.h>
10 #include <soc/aml-t931/t931-hw.h>
11
12 namespace sherlock {
13 static const pbus_mmio_t mali_mmios[] = {
14 {
15 .base = T931_MALI_BASE,
16 .length = T931_MALI_LENGTH,
17 },
18 {
19 .base = T931_HIU_BASE,
20 .length = T931_HIU_LENGTH,
21 },
22 {
23 .base = T931_RESET_BASE,
24 .length = T931_RESET_LENGTH,
25 },
26 };
27
28 static const pbus_irq_t mali_irqs[] = {
29 {
30 .irq = T931_MALI_IRQ_PP,
31 .mode = ZX_INTERRUPT_MODE_LEVEL_HIGH,
32 },
33 {
34 .irq = T931_MALI_IRQ_GPMMU,
35 .mode = ZX_INTERRUPT_MODE_LEVEL_HIGH,
36 },
37 {
38 .irq = T931_MALI_IRQ_GP,
39 .mode = ZX_INTERRUPT_MODE_LEVEL_HIGH,
40 },
41 };
42
43 static pbus_bti_t mali_btis[] = {
44 {
45 .iommu_index = 0,
46 .bti_id = BTI_MALI,
47 },
48 };
49
__anon53f08e4a0102() 50 static pbus_dev_t mali_dev = []() {
51 pbus_dev_t dev;
52 dev.name = "mali";
53 dev.vid = PDEV_VID_AMLOGIC;
54 dev.pid = PDEV_PID_AMLOGIC_T931;
55 dev.did = PDEV_DID_ARM_MALI_INIT;
56 dev.mmio_list = mali_mmios;
57 dev.mmio_count = countof(mali_mmios);
58 dev.irq_list = mali_irqs;
59 dev.irq_count = countof(mali_irqs);
60 dev.bti_list = mali_btis;
61 dev.bti_count = countof(mali_btis);
62 return dev;
63 }();
64
MaliInit()65 zx_status_t Sherlock::MaliInit() {
66 zx_status_t status = pbus_.DeviceAdd(&mali_dev);
67 if (status != ZX_OK) {
68 zxlogf(ERROR, "Sherlock::MaliInit: pbus_device_add failed: %d\n", status);
69 return status;
70 }
71 return status;
72 }
73
74 } // namespace sherlock
75