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 <ddk/debug.h>
6 #include <ddk/device.h>
7 #include <ddk/platform-defs.h>
8 #include "sherlock.h"
9
10 namespace sherlock {
11
12 namespace {
13 constexpr pbus_mmio_t display_mmios[] = {
14 {
15 // VBUS/VPU
16 .base = T931_VPU_BASE,
17 .length = T931_VPU_LENGTH,
18 },
19 };
20
21 static const pbus_irq_t display_irqs[] = {
22 {
23 .irq = T931_VIU1_VSYNC_IRQ,
24 .mode = ZX_INTERRUPT_MODE_EDGE_HIGH,
25 },
26 {
27 .irq = T931_RDMA_DONE,
28 .mode = ZX_INTERRUPT_MODE_EDGE_HIGH,
29 },
30 };
31
32 static const pbus_bti_t display_btis[] = {
33 {
34 .iommu_index = 0,
35 .bti_id = BTI_DISPLAY,
36 },
37 };
38
39 static const uint32_t display_protocols[] = {
40 ZX_PROTOCOL_AMLOGIC_CANVAS,
41 };
42
__anon11ad39fd0202() 43 static pbus_dev_t display_dev = []() {
44 pbus_dev_t dev;
45 dev.name = "display";
46 dev.vid = PDEV_VID_AMLOGIC;
47 dev.pid = PDEV_PID_AMLOGIC_S905D2;
48 dev.did = PDEV_DID_AMLOGIC_DISPLAY;
49 dev.mmio_list = display_mmios;
50 dev.mmio_count = countof(display_mmios);
51 dev.irq_list = display_irqs;
52 dev.irq_count = countof(display_irqs);
53 dev.bti_list = display_btis;
54 dev.bti_count = countof(display_btis);
55 dev.protocol_list = display_protocols;
56 dev.protocol_count = countof(display_protocols);
57 return dev;
58 }();
59
60 } // namespace
61
DisplayInit()62 zx_status_t Sherlock::DisplayInit() {
63
64 zx_status_t status = pbus_.DeviceAdd(&display_dev);
65 if (status != ZX_OK) {
66 zxlogf(ERROR, "%s: DeviceAdd failed %d\n", __func__, status);
67 return status;
68 }
69
70 return status;
71 }
72
73 } // namespace sherlock