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/protocol/platform-bus.h> 8#include <ddk/protocol/platform-defs.h> 9#include <soc/aml-s912/s912-hw.h> 10 11#include "vim.h" 12 13static pbus_mmio_t vim_video_mmios[] = { 14 { 15 .base = S912_FULL_CBUS_BASE, 16 .length = S912_FULL_CBUS_LENGTH, 17 }, 18 { 19 .base = S912_DOS_BASE, 20 .length = S912_DOS_LENGTH, 21 }, 22 { 23 .base = S912_HIU_BASE, 24 .length = S912_HIU_LENGTH, 25 }, 26 { 27 .base = S912_AOBUS_BASE, 28 .length = S912_AOBUS_LENGTH, 29 }, 30 { 31 .base = S912_DMC_REG_BASE, 32 .length = S912_DMC_REG_LENGTH, 33 }, 34}; 35 36static const pbus_bti_t vim_video_btis[] = { 37 { 38 .iommu_index = 0, 39 .bti_id = BTI_VIDEO, 40 }, 41}; 42 43static const pbus_irq_t vim_video_irqs[] = { 44 { 45 .irq = S912_DEMUX_IRQ, 46 .mode = ZX_INTERRUPT_MODE_EDGE_HIGH, 47 }, 48 { 49 .irq = S912_PARSER_IRQ, 50 .mode = ZX_INTERRUPT_MODE_EDGE_HIGH, 51 }, 52 { 53 .irq = S912_DOS_MBOX_0_IRQ, 54 .mode = ZX_INTERRUPT_MODE_EDGE_HIGH, 55 }, 56 { 57 .irq = S912_DOS_MBOX_1_IRQ, 58 .mode = ZX_INTERRUPT_MODE_EDGE_HIGH, 59 }, 60 { 61 .irq = S912_DOS_MBOX_2_IRQ, 62 .mode = ZX_INTERRUPT_MODE_EDGE_HIGH, 63 }, 64}; 65 66static const uint32_t vim_video_protocols[] = { 67 ZX_PROTOCOL_AMLOGIC_CANVAS, 68}; 69 70static const pbus_dev_t video_dev = { 71 .name = "video", 72 .vid = PDEV_VID_AMLOGIC, 73 .pid = PDEV_PID_AMLOGIC_S912, 74 .did = PDEV_DID_AMLOGIC_VIDEO, 75 .mmios = vim_video_mmios, 76 .mmio_count = countof(vim_video_mmios), 77 .btis = vim_video_btis, 78 .bti_count = countof(vim_video_btis), 79 .irqs = vim_video_irqs, 80 .irq_count = countof(vim_video_irqs), 81 .protocols = vim_video_protocols, 82 .protocol_count = countof(vim_video_protocols), 83}; 84 85 86zx_status_t vim_video_init(vim_bus_t* bus) { 87 zx_status_t status; 88 if ((status = pbus_device_add(&bus->pbus, &video_dev)) != ZX_OK) { 89 zxlogf(ERROR, "vim_video_init: pbus_device_add() failed for video: %d\n", status); 90 return status; 91 } 92 93 return ZX_OK; 94} 95