mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-11-09 20:45:41 +08:00
add raspi4 hdmi driver
This commit is contained in:
1 parent
67b6177de7
commit
c97f33d11d
5 files changed
+427
-12
No files matched your search
@@ -19,8 +19,10 @@
|
||||
|
||||
struct mem_desc platform_mem_desc[] = {
|
||||
{0x0, 0x6400000, 0x0, NORMAL_MEM},
|
||||
{0xFE000000, 0xFE400000, 0xFE000000, DEVICE_MEM},//uart gpio
|
||||
{0xFF800000, 0xFFA00000, 0xFF800000, DEVICE_MEM} //gic
|
||||
{0x8000000, 0x8100000, 0x8000000, DEVICE_MEM}, //mbox msg
|
||||
{0x0EA00000, 0x0EE00000, 0x0EA00000, DEVICE_MEM}, //framebuffer
|
||||
{0xFE000000, 0xFE400000, 0xFE000000, DEVICE_MEM}, //peripheral
|
||||
{0xFF800000, 0xFFA00000, 0xFF800000, DEVICE_MEM} //gic
|
||||
};
|
||||
|
||||
const rt_uint32_t platform_mem_desc_size = sizeof(platform_mem_desc)/sizeof(platform_mem_desc[0]);
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2020, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2020-10-26 bigmagic first version
|
||||
*/
|
||||
#ifndef __DRV_HDMI_H__
|
||||
#define __DRV_HDMI_H__
|
||||
|
||||
#define RGB(r, g, b) ((((r))<<16) | (((g))<<8) | ((b)))
|
||||
|
||||
struct rt_hdmi_fb_device
|
||||
{
|
||||
struct rt_device parent;
|
||||
|
||||
rt_uint32_t width;
|
||||
rt_uint32_t height;
|
||||
rt_uint32_t depth;
|
||||
rt_uint32_t pitch;
|
||||
rt_uint32_t pixel_format;
|
||||
|
||||
rt_uint8_t *fb;
|
||||
};
|
||||
#endif/* __DRV_HDMI_H__ */
|
||||
@@ -49,6 +49,52 @@ int mbox_call(unsigned char ch, int mmu_enable)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bcm271x_notify_reboot(void)
|
||||
{
|
||||
mbox[0] = 7*4; // length of the message
|
||||
mbox[1] = MBOX_REQUEST; // this is a request message
|
||||
mbox[2] = MBOX_TAG_NOTIFY_REBOOT; // (the tag id)
|
||||
mbox[3] = 0x00000004; // length + 4
|
||||
mbox[4] = 0x00000000; // size of the data
|
||||
mbox[5] = 0x00000000; // request
|
||||
|
||||
mbox[6] = MBOX_TAG_LAST;
|
||||
mbox_call(8, MMU_DISABLE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bcm271x_notify_xhci_reset(void)
|
||||
{
|
||||
mbox[0] = 7*4; // length of the message
|
||||
mbox[1] = MBOX_REQUEST; // this is a request message
|
||||
mbox[2] = MBOX_TAG_NOTIFY_XHCI_RESET; // (the tag id)
|
||||
mbox[3] = 0x00000004; // length + 4
|
||||
mbox[4] = 0x00000004; // size of the data
|
||||
mbox[5] = 0x00100000; // request
|
||||
mbox[6] = MBOX_TAG_LAST;
|
||||
mbox_call(8, MMU_DISABLE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bcm271x_gpu_enable(void)
|
||||
{
|
||||
mbox[0] = 12*4; // length of the message
|
||||
mbox[1] = MBOX_REQUEST; // this is a request message
|
||||
|
||||
mbox[2] = MBOX_TAG_CLOCK_SET_RATE;
|
||||
mbox[3] = 0x00000008; // (the tag id)
|
||||
mbox[4] = 0x00000008; // (the tag id)
|
||||
mbox[5] = 5; // V3D
|
||||
mbox[6] = 250 * 1000 * 1000;
|
||||
mbox[7] = MBOX_TAG_ENABLE_QPU; // (the tag id)
|
||||
mbox[8] = 0x00000004; // (size of the buffer)
|
||||
mbox[9] = 0x00000004; // (size of the data)
|
||||
mbox[10] = 0x00000001;
|
||||
mbox[11] = MBOX_TAG_LAST; // end tag
|
||||
mbox_call(8, MMU_DISABLE);
|
||||
return mbox[1];
|
||||
}
|
||||
|
||||
int bcm271x_mbox_hardware_get_model(void)
|
||||
{
|
||||
mbox[0] = 8*4; // length of the message
|
||||
|
||||
@@ -35,7 +35,7 @@ extern volatile unsigned int* mbox;
|
||||
/* tags */
|
||||
#define MBOX_TAG_SETPOWER 0x28001
|
||||
#define MBOX_TAG_SETCLKRATE 0x38002
|
||||
#define MBOX_GET_MAC_ADDRESS 0x10003
|
||||
#define MBOX_GET_MAC_ADDRESS 0x10003
|
||||
#define MBOX_TAG_LAST 0
|
||||
|
||||
#define MMIO_BASE 0xFE000000
|
||||
@@ -50,14 +50,14 @@ extern volatile unsigned int* mbox;
|
||||
#define MBOX_FULL 0x80000000
|
||||
#define MBOX_EMPTY 0x40000000
|
||||
|
||||
#define DEVICE_ID_SD_CARD 0
|
||||
#define DEVICE_ID_USB_HCD 3
|
||||
#define POWER_STATE_OFF (0 << 0)
|
||||
#define POWER_STATE_ON (1 << 0)
|
||||
#define POWER_STATE_WAIT (1 << 1)
|
||||
#define POWER_STATE_NO_DEVICE (1 << 1) // in response
|
||||
#define MMU_ENABLE 1
|
||||
#define MMU_DISABLE 0
|
||||
#define DEVICE_ID_SD_CARD (0)
|
||||
#define DEVICE_ID_USB_HCD (3)
|
||||
#define POWER_STATE_OFF (0 << 0)
|
||||
#define POWER_STATE_ON (1 << 0)
|
||||
#define POWER_STATE_WAIT (1 << 1)
|
||||
#define POWER_STATE_NO_DEVICE (1 << 1) // in response
|
||||
#define MMU_ENABLE (1)
|
||||
#define MMU_DISABLE (0)
|
||||
|
||||
/*
|
||||
* raspi hardware info
|
||||
@@ -102,9 +102,42 @@ enum {
|
||||
MBOX_TAG_TEMP_GET_MAX = 0x0003000A,
|
||||
};
|
||||
|
||||
#define MBOX_ADDR 0xc00000
|
||||
/*
|
||||
* raspi Memory
|
||||
*/
|
||||
enum {
|
||||
MBOX_TAG_ALLOCATE_MEMORY = 0x0003000C, // Memory: Allocates Contiguous Memory On The GPU (Response: Handle)
|
||||
MBOX_TAG_LOCK_MEMORY = 0x0003000D, // Memory: Unlock Buffer (Response: Status)
|
||||
MBOX_TAG_UNLOCK_MEMORY = 0x0003000E, // Memory: Unlock Buffer (Response: Status)
|
||||
MBOX_TAG_RELEASE_MEMORY = 0x0003000F, // Memory: Free The Memory Buffer (Response: Status)
|
||||
MBOX_TAG_EXECUTE_CODE = 0x00030010, // Memory: Calls The Function At Given (Bus) Address And With Arguments Given
|
||||
};
|
||||
|
||||
/*
|
||||
* raspi GPU
|
||||
*/
|
||||
enum {
|
||||
MBOX_TAG_EXECUTE_QPU = 0x00030011, // QPU: Calls The QPU Function At Given (Bus) Address And With Arguments Given (Response: Number Of QPUs, Control, No Flush, Timeout In ms)
|
||||
MBOX_TAG_ENABLE_QPU = 0x00030012, // QPU: Enables The QPU (Response: Enable State)
|
||||
};
|
||||
|
||||
/*
|
||||
* raspi HDMI
|
||||
*/
|
||||
#define MBOX_TAG_GET_EDID_BLOCK 0x00030020 // HDMI: Read Specificed EDID Block From Attached HDMI/DVI Device (Response: Block Number, Status, EDID Block (128 Bytes))
|
||||
|
||||
/*
|
||||
* raspi NOTIFY
|
||||
*/
|
||||
#define MBOX_TAG_NOTIFY_REBOOT 0x00030048
|
||||
#define MBOX_TAG_NOTIFY_XHCI_RESET 0x00030058
|
||||
|
||||
#define MBOX_ADDR 0x08000000
|
||||
|
||||
int mbox_call(unsigned char ch, int mmu_enable);
|
||||
int bcm271x_notify_reboot(void);
|
||||
int bcm271x_notify_xhci_reset(void);
|
||||
int bcm271x_gpu_enable(void);
|
||||
int bcm271x_mbox_hardware_get_model(void);
|
||||
int bcm271x_mbox_hardware_get_revison(void);
|
||||
int bcm271x_mbox_hardware_get_mac_address(uint8_t * mac);
|
||||
|
||||
Reference in new issue
Block a user