Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  *  Copyright © 2015 Broadcom
0004  */
0005 
0006 #ifndef __SOC_RASPBERRY_FIRMWARE_H__
0007 #define __SOC_RASPBERRY_FIRMWARE_H__
0008 
0009 #include <linux/types.h>
0010 #include <linux/of_device.h>
0011 
0012 struct rpi_firmware;
0013 
0014 enum rpi_firmware_property_status {
0015     RPI_FIRMWARE_STATUS_REQUEST = 0,
0016     RPI_FIRMWARE_STATUS_SUCCESS = 0x80000000,
0017     RPI_FIRMWARE_STATUS_ERROR =   0x80000001,
0018 };
0019 
0020 /**
0021  * struct rpi_firmware_property_tag_header - Firmware property tag header
0022  * @tag:        One of enum_mbox_property_tag.
0023  * @buf_size:       The number of bytes in the value buffer following this
0024  *          struct.
0025  * @req_resp_size:  On submit, the length of the request (though it doesn't
0026  *          appear to be currently used by the firmware).  On return,
0027  *          the length of the response (always 4 byte aligned), with
0028  *          the low bit set.
0029  */
0030 struct rpi_firmware_property_tag_header {
0031     u32 tag;
0032     u32 buf_size;
0033     u32 req_resp_size;
0034 };
0035 
0036 enum rpi_firmware_property_tag {
0037     RPI_FIRMWARE_PROPERTY_END =                           0,
0038     RPI_FIRMWARE_GET_FIRMWARE_REVISION =                  0x00000001,
0039 
0040     RPI_FIRMWARE_SET_CURSOR_INFO =                        0x00008010,
0041     RPI_FIRMWARE_SET_CURSOR_STATE =                       0x00008011,
0042 
0043     RPI_FIRMWARE_GET_BOARD_MODEL =                        0x00010001,
0044     RPI_FIRMWARE_GET_BOARD_REVISION =                     0x00010002,
0045     RPI_FIRMWARE_GET_BOARD_MAC_ADDRESS =                  0x00010003,
0046     RPI_FIRMWARE_GET_BOARD_SERIAL =                       0x00010004,
0047     RPI_FIRMWARE_GET_ARM_MEMORY =                         0x00010005,
0048     RPI_FIRMWARE_GET_VC_MEMORY =                          0x00010006,
0049     RPI_FIRMWARE_GET_CLOCKS =                             0x00010007,
0050     RPI_FIRMWARE_GET_POWER_STATE =                        0x00020001,
0051     RPI_FIRMWARE_GET_TIMING =                             0x00020002,
0052     RPI_FIRMWARE_SET_POWER_STATE =                        0x00028001,
0053     RPI_FIRMWARE_GET_CLOCK_STATE =                        0x00030001,
0054     RPI_FIRMWARE_GET_CLOCK_RATE =                         0x00030002,
0055     RPI_FIRMWARE_GET_VOLTAGE =                            0x00030003,
0056     RPI_FIRMWARE_GET_MAX_CLOCK_RATE =                     0x00030004,
0057     RPI_FIRMWARE_GET_MAX_VOLTAGE =                        0x00030005,
0058     RPI_FIRMWARE_GET_TEMPERATURE =                        0x00030006,
0059     RPI_FIRMWARE_GET_MIN_CLOCK_RATE =                     0x00030007,
0060     RPI_FIRMWARE_GET_MIN_VOLTAGE =                        0x00030008,
0061     RPI_FIRMWARE_GET_TURBO =                              0x00030009,
0062     RPI_FIRMWARE_GET_MAX_TEMPERATURE =                    0x0003000a,
0063     RPI_FIRMWARE_GET_STC =                                0x0003000b,
0064     RPI_FIRMWARE_ALLOCATE_MEMORY =                        0x0003000c,
0065     RPI_FIRMWARE_LOCK_MEMORY =                            0x0003000d,
0066     RPI_FIRMWARE_UNLOCK_MEMORY =                          0x0003000e,
0067     RPI_FIRMWARE_RELEASE_MEMORY =                         0x0003000f,
0068     RPI_FIRMWARE_EXECUTE_CODE =                           0x00030010,
0069     RPI_FIRMWARE_EXECUTE_QPU =                            0x00030011,
0070     RPI_FIRMWARE_SET_ENABLE_QPU =                         0x00030012,
0071     RPI_FIRMWARE_GET_DISPMANX_RESOURCE_MEM_HANDLE =       0x00030014,
0072     RPI_FIRMWARE_GET_EDID_BLOCK =                         0x00030020,
0073     RPI_FIRMWARE_GET_CUSTOMER_OTP =                       0x00030021,
0074     RPI_FIRMWARE_GET_DOMAIN_STATE =                       0x00030030,
0075     RPI_FIRMWARE_GET_THROTTLED =                          0x00030046,
0076     RPI_FIRMWARE_GET_CLOCK_MEASURED =                     0x00030047,
0077     RPI_FIRMWARE_NOTIFY_REBOOT =                          0x00030048,
0078     RPI_FIRMWARE_SET_CLOCK_STATE =                        0x00038001,
0079     RPI_FIRMWARE_SET_CLOCK_RATE =                         0x00038002,
0080     RPI_FIRMWARE_SET_VOLTAGE =                            0x00038003,
0081     RPI_FIRMWARE_SET_TURBO =                              0x00038009,
0082     RPI_FIRMWARE_SET_CUSTOMER_OTP =                       0x00038021,
0083     RPI_FIRMWARE_SET_DOMAIN_STATE =                       0x00038030,
0084     RPI_FIRMWARE_GET_GPIO_STATE =                         0x00030041,
0085     RPI_FIRMWARE_SET_GPIO_STATE =                         0x00038041,
0086     RPI_FIRMWARE_SET_SDHOST_CLOCK =                       0x00038042,
0087     RPI_FIRMWARE_GET_GPIO_CONFIG =                        0x00030043,
0088     RPI_FIRMWARE_SET_GPIO_CONFIG =                        0x00038043,
0089     RPI_FIRMWARE_GET_PERIPH_REG =                         0x00030045,
0090     RPI_FIRMWARE_SET_PERIPH_REG =                         0x00038045,
0091     RPI_FIRMWARE_GET_POE_HAT_VAL =                        0x00030049,
0092     RPI_FIRMWARE_SET_POE_HAT_VAL =                        0x00030050,
0093     RPI_FIRMWARE_NOTIFY_XHCI_RESET =                      0x00030058,
0094     RPI_FIRMWARE_NOTIFY_DISPLAY_DONE =                    0x00030066,
0095 
0096     /* Dispmanx TAGS */
0097     RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE =                   0x00040001,
0098     RPI_FIRMWARE_FRAMEBUFFER_BLANK =                      0x00040002,
0099     RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT =  0x00040003,
0100     RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_WIDTH_HEIGHT =   0x00040004,
0101     RPI_FIRMWARE_FRAMEBUFFER_GET_DEPTH =                  0x00040005,
0102     RPI_FIRMWARE_FRAMEBUFFER_GET_PIXEL_ORDER =            0x00040006,
0103     RPI_FIRMWARE_FRAMEBUFFER_GET_ALPHA_MODE =             0x00040007,
0104     RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH =                  0x00040008,
0105     RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_OFFSET =         0x00040009,
0106     RPI_FIRMWARE_FRAMEBUFFER_GET_OVERSCAN =               0x0004000a,
0107     RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE =                0x0004000b,
0108     RPI_FIRMWARE_FRAMEBUFFER_GET_TOUCHBUF =               0x0004000f,
0109     RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF =            0x00040010,
0110     RPI_FIRMWARE_FRAMEBUFFER_RELEASE =                    0x00048001,
0111     RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 0x00044003,
0112     RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT =  0x00044004,
0113     RPI_FIRMWARE_FRAMEBUFFER_TEST_DEPTH =                 0x00044005,
0114     RPI_FIRMWARE_FRAMEBUFFER_TEST_PIXEL_ORDER =           0x00044006,
0115     RPI_FIRMWARE_FRAMEBUFFER_TEST_ALPHA_MODE =            0x00044007,
0116     RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_OFFSET =        0x00044009,
0117     RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN =              0x0004400a,
0118     RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE =               0x0004400b,
0119     RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC =                 0x0004400e,
0120     RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT =  0x00048003,
0121     RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT =   0x00048004,
0122     RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH =                  0x00048005,
0123     RPI_FIRMWARE_FRAMEBUFFER_SET_PIXEL_ORDER =            0x00048006,
0124     RPI_FIRMWARE_FRAMEBUFFER_SET_ALPHA_MODE =             0x00048007,
0125     RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET =         0x00048009,
0126     RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN =               0x0004800a,
0127     RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE =                0x0004800b,
0128     RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF =               0x0004801f,
0129     RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF =            0x00048020,
0130     RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC =                  0x0004800e,
0131     RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT =              0x0004800f,
0132 
0133     RPI_FIRMWARE_VCHIQ_INIT =                             0x00048010,
0134 
0135     RPI_FIRMWARE_GET_COMMAND_LINE =                       0x00050001,
0136     RPI_FIRMWARE_GET_DMA_CHANNELS =                       0x00060001,
0137 };
0138 
0139 #if IS_ENABLED(CONFIG_RASPBERRYPI_FIRMWARE)
0140 int rpi_firmware_property(struct rpi_firmware *fw,
0141               u32 tag, void *data, size_t len);
0142 int rpi_firmware_property_list(struct rpi_firmware *fw,
0143                    void *data, size_t tag_size);
0144 void rpi_firmware_put(struct rpi_firmware *fw);
0145 struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node);
0146 struct rpi_firmware *devm_rpi_firmware_get(struct device *dev,
0147                        struct device_node *firmware_node);
0148 #else
0149 static inline int rpi_firmware_property(struct rpi_firmware *fw, u32 tag,
0150                     void *data, size_t len)
0151 {
0152     return -ENOSYS;
0153 }
0154 
0155 static inline int rpi_firmware_property_list(struct rpi_firmware *fw,
0156                          void *data, size_t tag_size)
0157 {
0158     return -ENOSYS;
0159 }
0160 
0161 static inline void rpi_firmware_put(struct rpi_firmware *fw) { }
0162 static inline struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node)
0163 {
0164     return NULL;
0165 }
0166 
0167 static inline struct rpi_firmware *devm_rpi_firmware_get(struct device *dev,
0168                     struct device_node *firmware_node)
0169 {
0170     return NULL;
0171 }
0172 #endif
0173 
0174 #endif /* __SOC_RASPBERRY_FIRMWARE_H__ */