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/device.h>
9 #include <ddk/platform-defs.h>
10 #include <ddk/protocol/platform/bus.h>
11 
12 #include <soc/aml-t931/t931-hw.h>
13 
14 #include <limits.h>
15 
16 namespace sherlock {
17 
18 static const pbus_mmio_t sherlock_canvas_mmios[] = {
19     {
20         .base = T931_DMC_BASE,
21         .length = T931_DMC_LENGTH,
22     },
23 };
24 
25 static const pbus_bti_t sherlock_canvas_btis[] = {
26     {
27         .iommu_index = 0,
28         .bti_id = BTI_CANVAS,
29     },
30 };
31 
__anon2310a3c30102() 32 static pbus_dev_t canvas_dev = []() {
33     pbus_dev_t dev;
34     dev.name = "canvas";
35     dev.vid = PDEV_VID_AMLOGIC;
36     dev.pid = PDEV_PID_GENERIC;
37     dev.did = PDEV_DID_AMLOGIC_CANVAS;
38     dev.mmio_list = sherlock_canvas_mmios;
39     dev.mmio_count = countof(sherlock_canvas_mmios);
40     dev.bti_list = sherlock_canvas_btis;
41     dev.bti_count = countof(sherlock_canvas_btis);
42     return dev;
43 }();
44 
CanvasInit()45 zx_status_t Sherlock::CanvasInit() {
46     zx_status_t status = pbus_.ProtocolDeviceAdd(ZX_PROTOCOL_AMLOGIC_CANVAS, &canvas_dev);
47     if (status != ZX_OK) {
48         zxlogf(ERROR, "Sherlock::CanvasInit: pbus_device_add failed: %d\n", status);
49         return status;
50     }
51     return status;
52 }
53 
54 }  // namespace sherlock
55