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