| .. | .. |
|---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-only */ |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Copyright © 2014-2015 Broadcom |
|---|
| 3 | | - * |
|---|
| 4 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 5 | | - * it under the terms of the GNU General Public License version 2 as |
|---|
| 6 | | - * published by the Free Software Foundation. |
|---|
| 7 | 4 | */ |
|---|
| 8 | 5 | |
|---|
| 9 | 6 | #ifndef VC4_REGS_H |
|---|
| 10 | 7 | #define VC4_REGS_H |
|---|
| 11 | 8 | |
|---|
| 9 | +#include <linux/bitfield.h> |
|---|
| 12 | 10 | #include <linux/bitops.h> |
|---|
| 13 | 11 | |
|---|
| 14 | 12 | #define VC4_MASK(high, low) ((u32)GENMASK(high, low)) |
|---|
| 15 | 13 | /* Using the GNU statement expression extension */ |
|---|
| 16 | 14 | #define VC4_SET_FIELD(value, field) \ |
|---|
| 17 | 15 | ({ \ |
|---|
| 18 | | - uint32_t fieldval = (value) << field##_SHIFT; \ |
|---|
| 19 | | - WARN_ON((fieldval & ~field##_MASK) != 0); \ |
|---|
| 20 | | - fieldval & field##_MASK; \ |
|---|
| 16 | + WARN_ON(!FIELD_FIT(field##_MASK, value)); \ |
|---|
| 17 | + FIELD_PREP(field##_MASK, value); \ |
|---|
| 21 | 18 | }) |
|---|
| 22 | 19 | |
|---|
| 23 | | -#define VC4_GET_FIELD(word, field) (((word) & field##_MASK) >> \ |
|---|
| 24 | | - field##_SHIFT) |
|---|
| 20 | +#define VC4_GET_FIELD(word, field) FIELD_GET(field##_MASK, word) |
|---|
| 25 | 21 | |
|---|
| 26 | 22 | #define V3D_IDENT0 0x00000 |
|---|
| 27 | 23 | # define V3D_EXPECTED_IDENT0 \ |
|---|
| .. | .. |
|---|
| 133 | 129 | #define V3D_ERRSTAT 0x00f20 |
|---|
| 134 | 130 | |
|---|
| 135 | 131 | #define PV_CONTROL 0x00 |
|---|
| 132 | +# define PV5_CONTROL_FIFO_LEVEL_HIGH_MASK VC4_MASK(26, 25) |
|---|
| 133 | +# define PV5_CONTROL_FIFO_LEVEL_HIGH_SHIFT 25 |
|---|
| 136 | 134 | # define PV_CONTROL_FORMAT_MASK VC4_MASK(23, 21) |
|---|
| 137 | 135 | # define PV_CONTROL_FORMAT_SHIFT 21 |
|---|
| 138 | 136 | # define PV_CONTROL_FORMAT_24 0 |
|---|
| .. | .. |
|---|
| 212 | 210 | |
|---|
| 213 | 211 | #define PV_HACT_ACT 0x30 |
|---|
| 214 | 212 | |
|---|
| 213 | +#define PV_MUX_CFG 0x34 |
|---|
| 214 | +# define PV_MUX_CFG_RGB_PIXEL_MUX_MODE_MASK VC4_MASK(5, 2) |
|---|
| 215 | +# define PV_MUX_CFG_RGB_PIXEL_MUX_MODE_SHIFT 2 |
|---|
| 216 | +# define PV_MUX_CFG_RGB_PIXEL_MUX_MODE_NO_SWAP 8 |
|---|
| 217 | + |
|---|
| 218 | +#define SCALER_CHANNELS_COUNT 3 |
|---|
| 219 | + |
|---|
| 215 | 220 | #define SCALER_DISPCTRL 0x00000000 |
|---|
| 216 | 221 | /* Global register for clock gating the HVS */ |
|---|
| 217 | 222 | # define SCALER_DISPCTRL_ENABLE BIT(31) |
|---|
| 218 | | -# define SCALER_DISPCTRL_DSP2EISLUR BIT(15) |
|---|
| 219 | | -# define SCALER_DISPCTRL_DSP1EISLUR BIT(14) |
|---|
| 223 | +# define SCALER_DISPCTRL_PANIC0_MASK VC4_MASK(25, 24) |
|---|
| 224 | +# define SCALER_DISPCTRL_PANIC0_SHIFT 24 |
|---|
| 225 | +# define SCALER_DISPCTRL_PANIC1_MASK VC4_MASK(27, 26) |
|---|
| 226 | +# define SCALER_DISPCTRL_PANIC1_SHIFT 26 |
|---|
| 227 | +# define SCALER_DISPCTRL_PANIC2_MASK VC4_MASK(29, 28) |
|---|
| 228 | +# define SCALER_DISPCTRL_PANIC2_SHIFT 28 |
|---|
| 220 | 229 | # define SCALER_DISPCTRL_DSP3_MUX_MASK VC4_MASK(19, 18) |
|---|
| 221 | 230 | # define SCALER_DISPCTRL_DSP3_MUX_SHIFT 18 |
|---|
| 222 | 231 | |
|---|
| .. | .. |
|---|
| 224 | 233 | * SCALER_DISPSTAT_IRQDISP0. Note that short frame contributions are |
|---|
| 225 | 234 | * always enabled. |
|---|
| 226 | 235 | */ |
|---|
| 227 | | -# define SCALER_DISPCTRL_DSP0EISLUR BIT(13) |
|---|
| 228 | | -# define SCALER_DISPCTRL_DSP2EIEOLN BIT(12) |
|---|
| 229 | | -# define SCALER_DISPCTRL_DSP2EIEOF BIT(11) |
|---|
| 230 | | -# define SCALER_DISPCTRL_DSP1EIEOLN BIT(10) |
|---|
| 231 | | -# define SCALER_DISPCTRL_DSP1EIEOF BIT(9) |
|---|
| 236 | +# define SCALER_DISPCTRL_DSPEISLUR(x) BIT(13 + (x)) |
|---|
| 232 | 237 | /* Enables Display 0 end-of-line-N contribution to |
|---|
| 233 | 238 | * SCALER_DISPSTAT_IRQDISP0 |
|---|
| 234 | 239 | */ |
|---|
| 235 | | -# define SCALER_DISPCTRL_DSP0EIEOLN BIT(8) |
|---|
| 240 | +# define SCALER_DISPCTRL_DSPEIEOLN(x) BIT(8 + ((x) * 2)) |
|---|
| 236 | 241 | /* Enables Display 0 EOF contribution to SCALER_DISPSTAT_IRQDISP0 */ |
|---|
| 237 | | -# define SCALER_DISPCTRL_DSP0EIEOF BIT(7) |
|---|
| 242 | +# define SCALER_DISPCTRL_DSPEIEOF(x) BIT(7 + ((x) * 2)) |
|---|
| 238 | 243 | |
|---|
| 239 | 244 | # define SCALER_DISPCTRL_SLVRDEIRQ BIT(6) |
|---|
| 240 | 245 | # define SCALER_DISPCTRL_SLVWREIRQ BIT(5) |
|---|
| 241 | 246 | # define SCALER_DISPCTRL_DMAEIRQ BIT(4) |
|---|
| 242 | | -# define SCALER_DISPCTRL_DISP2EIRQ BIT(3) |
|---|
| 243 | | -# define SCALER_DISPCTRL_DISP1EIRQ BIT(2) |
|---|
| 244 | 247 | /* Enables interrupt generation on the enabled EOF/EOLN/EISLUR |
|---|
| 245 | 248 | * bits and short frames.. |
|---|
| 246 | 249 | */ |
|---|
| 247 | | -# define SCALER_DISPCTRL_DISP0EIRQ BIT(1) |
|---|
| 250 | +# define SCALER_DISPCTRL_DISPEIRQ(x) BIT(1 + (x)) |
|---|
| 248 | 251 | /* Enables interrupt generation on scaler profiler interrupt. */ |
|---|
| 249 | 252 | # define SCALER_DISPCTRL_SCLEIRQ BIT(0) |
|---|
| 250 | 253 | |
|---|
| 251 | 254 | #define SCALER_DISPSTAT 0x00000004 |
|---|
| 252 | | -# define SCALER_DISPSTAT_COBLOW2 BIT(29) |
|---|
| 253 | | -# define SCALER_DISPSTAT_EOLN2 BIT(28) |
|---|
| 254 | | -# define SCALER_DISPSTAT_ESFRAME2 BIT(27) |
|---|
| 255 | | -# define SCALER_DISPSTAT_ESLINE2 BIT(26) |
|---|
| 256 | | -# define SCALER_DISPSTAT_EUFLOW2 BIT(25) |
|---|
| 257 | | -# define SCALER_DISPSTAT_EOF2 BIT(24) |
|---|
| 258 | | - |
|---|
| 259 | | -# define SCALER_DISPSTAT_COBLOW1 BIT(21) |
|---|
| 260 | | -# define SCALER_DISPSTAT_EOLN1 BIT(20) |
|---|
| 261 | | -# define SCALER_DISPSTAT_ESFRAME1 BIT(19) |
|---|
| 262 | | -# define SCALER_DISPSTAT_ESLINE1 BIT(18) |
|---|
| 263 | | -# define SCALER_DISPSTAT_EUFLOW1 BIT(17) |
|---|
| 264 | | -# define SCALER_DISPSTAT_EOF1 BIT(16) |
|---|
| 265 | | - |
|---|
| 266 | 255 | # define SCALER_DISPSTAT_RESP_MASK VC4_MASK(15, 14) |
|---|
| 267 | 256 | # define SCALER_DISPSTAT_RESP_SHIFT 14 |
|---|
| 268 | 257 | # define SCALER_DISPSTAT_RESP_OKAY 0 |
|---|
| .. | .. |
|---|
| 270 | 259 | # define SCALER_DISPSTAT_RESP_SLVERR 2 |
|---|
| 271 | 260 | # define SCALER_DISPSTAT_RESP_DECERR 3 |
|---|
| 272 | 261 | |
|---|
| 273 | | -# define SCALER_DISPSTAT_COBLOW0 BIT(13) |
|---|
| 262 | +# define SCALER_DISPSTAT_COBLOW(x) BIT(13 + ((x) * 8)) |
|---|
| 274 | 263 | /* Set when the DISPEOLN line is done compositing. */ |
|---|
| 275 | | -# define SCALER_DISPSTAT_EOLN0 BIT(12) |
|---|
| 264 | +# define SCALER_DISPSTAT_EOLN(x) BIT(12 + ((x) * 8)) |
|---|
| 276 | 265 | /* Set when VSTART is seen but there are still pixels in the current |
|---|
| 277 | 266 | * output line. |
|---|
| 278 | 267 | */ |
|---|
| 279 | | -# define SCALER_DISPSTAT_ESFRAME0 BIT(11) |
|---|
| 268 | +# define SCALER_DISPSTAT_ESFRAME(x) BIT(11 + ((x) * 8)) |
|---|
| 280 | 269 | /* Set when HSTART is seen but there are still pixels in the current |
|---|
| 281 | 270 | * output line. |
|---|
| 282 | 271 | */ |
|---|
| 283 | | -# define SCALER_DISPSTAT_ESLINE0 BIT(10) |
|---|
| 272 | +# define SCALER_DISPSTAT_ESLINE(x) BIT(10 + ((x) * 8)) |
|---|
| 284 | 273 | /* Set when the the downstream tries to read from the display FIFO |
|---|
| 285 | 274 | * while it's empty. |
|---|
| 286 | 275 | */ |
|---|
| 287 | | -# define SCALER_DISPSTAT_EUFLOW0 BIT(9) |
|---|
| 276 | +# define SCALER_DISPSTAT_EUFLOW(x) BIT(9 + ((x) * 8)) |
|---|
| 288 | 277 | /* Set when the display mode changes from RUN to EOF */ |
|---|
| 289 | | -# define SCALER_DISPSTAT_EOF0 BIT(8) |
|---|
| 278 | +# define SCALER_DISPSTAT_EOF(x) BIT(8 + ((x) * 8)) |
|---|
| 279 | + |
|---|
| 280 | +# define SCALER_DISPSTAT_IRQMASK(x) VC4_MASK(13 + ((x) * 8), \ |
|---|
| 281 | + 8 + ((x) * 8)) |
|---|
| 290 | 282 | |
|---|
| 291 | 283 | /* Set on AXI invalid DMA ID error. */ |
|---|
| 292 | 284 | # define SCALER_DISPSTAT_DMA_ERROR BIT(7) |
|---|
| .. | .. |
|---|
| 298 | 290 | * SCALER_DISPSTAT_RESP_ERROR is not SCALER_DISPSTAT_RESP_OKAY. |
|---|
| 299 | 291 | */ |
|---|
| 300 | 292 | # define SCALER_DISPSTAT_IRQDMA BIT(4) |
|---|
| 301 | | -# define SCALER_DISPSTAT_IRQDISP2 BIT(3) |
|---|
| 302 | | -# define SCALER_DISPSTAT_IRQDISP1 BIT(2) |
|---|
| 303 | 293 | /* Set when any of the EOF/EOLN/ESFRAME/ESLINE bits are set and their |
|---|
| 304 | 294 | * corresponding interrupt bit is enabled in DISPCTRL. |
|---|
| 305 | 295 | */ |
|---|
| 306 | | -# define SCALER_DISPSTAT_IRQDISP0 BIT(1) |
|---|
| 296 | +# define SCALER_DISPSTAT_IRQDISP(x) BIT(1 + (x)) |
|---|
| 307 | 297 | /* On read, the profiler interrupt. On write, clear *all* interrupt bits. */ |
|---|
| 308 | 298 | # define SCALER_DISPSTAT_IRQSCL BIT(0) |
|---|
| 309 | 299 | |
|---|
| 310 | 300 | #define SCALER_DISPID 0x00000008 |
|---|
| 311 | 301 | #define SCALER_DISPECTRL 0x0000000c |
|---|
| 302 | +# define SCALER_DISPECTRL_DSP2_MUX_SHIFT 31 |
|---|
| 303 | +# define SCALER_DISPECTRL_DSP2_MUX_MASK VC4_MASK(31, 31) |
|---|
| 304 | + |
|---|
| 312 | 305 | #define SCALER_DISPPROF 0x00000010 |
|---|
| 306 | + |
|---|
| 313 | 307 | #define SCALER_DISPDITHER 0x00000014 |
|---|
| 308 | +# define SCALER_DISPDITHER_DSP5_MUX_SHIFT 30 |
|---|
| 309 | +# define SCALER_DISPDITHER_DSP5_MUX_MASK VC4_MASK(31, 30) |
|---|
| 310 | + |
|---|
| 314 | 311 | #define SCALER_DISPEOLN 0x00000018 |
|---|
| 312 | +# define SCALER_DISPEOLN_DSP4_MUX_SHIFT 30 |
|---|
| 313 | +# define SCALER_DISPEOLN_DSP4_MUX_MASK VC4_MASK(31, 30) |
|---|
| 314 | + |
|---|
| 315 | 315 | #define SCALER_DISPLIST0 0x00000020 |
|---|
| 316 | 316 | #define SCALER_DISPLIST1 0x00000024 |
|---|
| 317 | 317 | #define SCALER_DISPLIST2 0x00000028 |
|---|
| .. | .. |
|---|
| 349 | 349 | # define SCALER_DISPCTRLX_WIDTH_SHIFT 12 |
|---|
| 350 | 350 | # define SCALER_DISPCTRLX_HEIGHT_MASK VC4_MASK(11, 0) |
|---|
| 351 | 351 | # define SCALER_DISPCTRLX_HEIGHT_SHIFT 0 |
|---|
| 352 | + |
|---|
| 353 | +# define SCALER5_DISPCTRLX_WIDTH_MASK VC4_MASK(28, 16) |
|---|
| 354 | +# define SCALER5_DISPCTRLX_WIDTH_SHIFT 16 |
|---|
| 355 | +/* Generates a single frame when VSTART is seen and stops at the last |
|---|
| 356 | + * pixel read from the FIFO. |
|---|
| 357 | + */ |
|---|
| 358 | +# define SCALER5_DISPCTRLX_ONESHOT BIT(15) |
|---|
| 359 | +/* Processes a single context in the dlist and then task switch, |
|---|
| 360 | + * instead of an entire line. |
|---|
| 361 | + */ |
|---|
| 362 | +# define SCALER5_DISPCTRLX_ONECTX_MASK VC4_MASK(14, 13) |
|---|
| 363 | +# define SCALER5_DISPCTRLX_ONECTX_SHIFT 13 |
|---|
| 364 | +# define SCALER5_DISPCTRLX_HEIGHT_MASK VC4_MASK(12, 0) |
|---|
| 365 | +# define SCALER5_DISPCTRLX_HEIGHT_SHIFT 0 |
|---|
| 352 | 366 | |
|---|
| 353 | 367 | #define SCALER_DISPBKGND0 0x00000044 |
|---|
| 354 | 368 | # define SCALER_DISPBKGND_AUTOHS BIT(31) |
|---|
| .. | .. |
|---|
| 483 | 497 | #define SCALER_DLIST_START 0x00002000 |
|---|
| 484 | 498 | #define SCALER_DLIST_SIZE 0x00004000 |
|---|
| 485 | 499 | |
|---|
| 486 | | -#define VC4_HDMI_CORE_REV 0x000 |
|---|
| 500 | +#define SCALER5_DLIST_START 0x00004000 |
|---|
| 487 | 501 | |
|---|
| 488 | | -#define VC4_HDMI_SW_RESET_CONTROL 0x004 |
|---|
| 489 | 502 | # define VC4_HDMI_SW_RESET_FORMAT_DETECT BIT(1) |
|---|
| 490 | 503 | # define VC4_HDMI_SW_RESET_HDMI BIT(0) |
|---|
| 491 | 504 | |
|---|
| 492 | | -#define VC4_HDMI_HOTPLUG_INT 0x008 |
|---|
| 493 | | - |
|---|
| 494 | | -#define VC4_HDMI_HOTPLUG 0x00c |
|---|
| 495 | 505 | # define VC4_HDMI_HOTPLUG_CONNECTED BIT(0) |
|---|
| 496 | 506 | |
|---|
| 497 | | -/* 3 bits per field, where each field maps from that corresponding MAI |
|---|
| 498 | | - * bus channel to the given HDMI channel. |
|---|
| 499 | | - */ |
|---|
| 500 | | -#define VC4_HDMI_MAI_CHANNEL_MAP 0x090 |
|---|
| 501 | | - |
|---|
| 502 | | -#define VC4_HDMI_MAI_CONFIG 0x094 |
|---|
| 503 | 507 | # define VC4_HDMI_MAI_CONFIG_FORMAT_REVERSE BIT(27) |
|---|
| 504 | 508 | # define VC4_HDMI_MAI_CONFIG_BIT_REVERSE BIT(26) |
|---|
| 505 | 509 | # define VC4_HDMI_MAI_CHANNEL_MASK_MASK VC4_MASK(15, 0) |
|---|
| 506 | 510 | # define VC4_HDMI_MAI_CHANNEL_MASK_SHIFT 0 |
|---|
| 507 | 511 | |
|---|
| 508 | | -/* Last received format word on the MAI bus. */ |
|---|
| 509 | | -#define VC4_HDMI_MAI_FORMAT 0x098 |
|---|
| 510 | | - |
|---|
| 511 | | -#define VC4_HDMI_AUDIO_PACKET_CONFIG 0x09c |
|---|
| 512 | 512 | # define VC4_HDMI_AUDIO_PACKET_ZERO_DATA_ON_SAMPLE_FLAT BIT(29) |
|---|
| 513 | 513 | # define VC4_HDMI_AUDIO_PACKET_ZERO_DATA_ON_INACTIVE_CHANNELS BIT(24) |
|---|
| 514 | 514 | # define VC4_HDMI_AUDIO_PACKET_FORCE_SAMPLE_PRESENT BIT(19) |
|---|
| .. | .. |
|---|
| 522 | 522 | # define VC4_HDMI_AUDIO_PACKET_CEA_MASK_MASK VC4_MASK(7, 0) |
|---|
| 523 | 523 | # define VC4_HDMI_AUDIO_PACKET_CEA_MASK_SHIFT 0 |
|---|
| 524 | 524 | |
|---|
| 525 | | -#define VC4_HDMI_RAM_PACKET_CONFIG 0x0a0 |
|---|
| 526 | 525 | # define VC4_HDMI_RAM_PACKET_ENABLE BIT(16) |
|---|
| 527 | 526 | |
|---|
| 528 | | -#define VC4_HDMI_RAM_PACKET_STATUS 0x0a4 |
|---|
| 529 | | - |
|---|
| 530 | | -#define VC4_HDMI_CRP_CFG 0x0a8 |
|---|
| 531 | 527 | /* When set, the CTS_PERIOD counts based on MAI bus sync pulse instead |
|---|
| 532 | 528 | * of pixel clock. |
|---|
| 533 | 529 | */ |
|---|
| .. | .. |
|---|
| 541 | 537 | # define VC4_HDMI_CRP_CFG_N_MASK VC4_MASK(19, 0) |
|---|
| 542 | 538 | # define VC4_HDMI_CRP_CFG_N_SHIFT 0 |
|---|
| 543 | 539 | |
|---|
| 544 | | -/* 20-bit fields containing CTS values to be transmitted if !EXTERNAL_CTS_EN */ |
|---|
| 545 | | -#define VC4_HDMI_CTS_0 0x0ac |
|---|
| 546 | | -#define VC4_HDMI_CTS_1 0x0b0 |
|---|
| 547 | | -/* 20-bit fields containing number of clocks to send CTS0/1 before |
|---|
| 548 | | - * switching to the other one. |
|---|
| 549 | | - */ |
|---|
| 550 | | -#define VC4_HDMI_CTS_PERIOD_0 0x0b4 |
|---|
| 551 | | -#define VC4_HDMI_CTS_PERIOD_1 0x0b8 |
|---|
| 552 | | - |
|---|
| 553 | | -#define VC4_HDMI_HORZA 0x0c4 |
|---|
| 554 | 540 | # define VC4_HDMI_HORZA_VPOS BIT(14) |
|---|
| 555 | 541 | # define VC4_HDMI_HORZA_HPOS BIT(13) |
|---|
| 556 | 542 | /* Horizontal active pixels (hdisplay). */ |
|---|
| 557 | 543 | # define VC4_HDMI_HORZA_HAP_MASK VC4_MASK(12, 0) |
|---|
| 558 | 544 | # define VC4_HDMI_HORZA_HAP_SHIFT 0 |
|---|
| 559 | 545 | |
|---|
| 560 | | -#define VC4_HDMI_HORZB 0x0c8 |
|---|
| 561 | 546 | /* Horizontal pack porch (htotal - hsync_end). */ |
|---|
| 562 | 547 | # define VC4_HDMI_HORZB_HBP_MASK VC4_MASK(29, 20) |
|---|
| 563 | 548 | # define VC4_HDMI_HORZB_HBP_SHIFT 20 |
|---|
| .. | .. |
|---|
| 568 | 553 | # define VC4_HDMI_HORZB_HFP_MASK VC4_MASK(9, 0) |
|---|
| 569 | 554 | # define VC4_HDMI_HORZB_HFP_SHIFT 0 |
|---|
| 570 | 555 | |
|---|
| 571 | | -#define VC4_HDMI_FIFO_CTL 0x05c |
|---|
| 572 | 556 | # define VC4_HDMI_FIFO_CTL_RECENTER_DONE BIT(14) |
|---|
| 573 | 557 | # define VC4_HDMI_FIFO_CTL_USE_EMPTY BIT(13) |
|---|
| 574 | 558 | # define VC4_HDMI_FIFO_CTL_ON_VB BIT(7) |
|---|
| .. | .. |
|---|
| 581 | 565 | # define VC4_HDMI_FIFO_CTL_MASTER_SLAVE_N BIT(0) |
|---|
| 582 | 566 | # define VC4_HDMI_FIFO_VALID_WRITE_MASK 0xefff |
|---|
| 583 | 567 | |
|---|
| 584 | | -#define VC4_HDMI_SCHEDULER_CONTROL 0x0c0 |
|---|
| 585 | 568 | # define VC4_HDMI_SCHEDULER_CONTROL_MANUAL_FORMAT BIT(15) |
|---|
| 586 | 569 | # define VC4_HDMI_SCHEDULER_CONTROL_IGNORE_VSYNC_PREDICTS BIT(5) |
|---|
| 587 | 570 | # define VC4_HDMI_SCHEDULER_CONTROL_VERT_ALWAYS_KEEPOUT BIT(3) |
|---|
| 588 | 571 | # define VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE BIT(1) |
|---|
| 589 | 572 | # define VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI BIT(0) |
|---|
| 590 | 573 | |
|---|
| 591 | | -#define VC4_HDMI_VERTA0 0x0cc |
|---|
| 592 | | -#define VC4_HDMI_VERTA1 0x0d4 |
|---|
| 593 | 574 | /* Vertical sync pulse (vsync_end - vsync_start). */ |
|---|
| 594 | 575 | # define VC4_HDMI_VERTA_VSP_MASK VC4_MASK(24, 20) |
|---|
| 595 | 576 | # define VC4_HDMI_VERTA_VSP_SHIFT 20 |
|---|
| .. | .. |
|---|
| 600 | 581 | # define VC4_HDMI_VERTA_VAL_MASK VC4_MASK(12, 0) |
|---|
| 601 | 582 | # define VC4_HDMI_VERTA_VAL_SHIFT 0 |
|---|
| 602 | 583 | |
|---|
| 603 | | -#define VC4_HDMI_VERTB0 0x0d0 |
|---|
| 604 | | -#define VC4_HDMI_VERTB1 0x0d8 |
|---|
| 605 | 584 | /* Vertical sync pulse offset (for interlaced) */ |
|---|
| 606 | 585 | # define VC4_HDMI_VERTB_VSPO_MASK VC4_MASK(21, 9) |
|---|
| 607 | 586 | # define VC4_HDMI_VERTB_VSPO_SHIFT 9 |
|---|
| .. | .. |
|---|
| 609 | 588 | # define VC4_HDMI_VERTB_VBP_MASK VC4_MASK(8, 0) |
|---|
| 610 | 589 | # define VC4_HDMI_VERTB_VBP_SHIFT 0 |
|---|
| 611 | 590 | |
|---|
| 612 | | -#define VC4_HDMI_CEC_CNTRL_1 0x0e8 |
|---|
| 613 | 591 | /* Set when the transmission has ended. */ |
|---|
| 614 | 592 | # define VC4_HDMI_CEC_TX_EOM BIT(31) |
|---|
| 615 | 593 | /* If set, transmission was acked on the 1st or 2nd attempt (only one |
|---|
| .. | .. |
|---|
| 650 | 628 | /* Set these fields to how many bit clock cycles get to that many |
|---|
| 651 | 629 | * microseconds. |
|---|
| 652 | 630 | */ |
|---|
| 653 | | -#define VC4_HDMI_CEC_CNTRL_2 0x0ec |
|---|
| 654 | 631 | # define VC4_HDMI_CEC_CNT_TO_1500_US_MASK VC4_MASK(30, 24) |
|---|
| 655 | 632 | # define VC4_HDMI_CEC_CNT_TO_1500_US_SHIFT 24 |
|---|
| 656 | 633 | # define VC4_HDMI_CEC_CNT_TO_1300_US_MASK VC4_MASK(23, 17) |
|---|
| .. | .. |
|---|
| 662 | 639 | # define VC4_HDMI_CEC_CNT_TO_400_US_MASK VC4_MASK(4, 0) |
|---|
| 663 | 640 | # define VC4_HDMI_CEC_CNT_TO_400_US_SHIFT 0 |
|---|
| 664 | 641 | |
|---|
| 665 | | -#define VC4_HDMI_CEC_CNTRL_3 0x0f0 |
|---|
| 666 | 642 | # define VC4_HDMI_CEC_CNT_TO_2750_US_MASK VC4_MASK(31, 24) |
|---|
| 667 | 643 | # define VC4_HDMI_CEC_CNT_TO_2750_US_SHIFT 24 |
|---|
| 668 | 644 | # define VC4_HDMI_CEC_CNT_TO_2400_US_MASK VC4_MASK(23, 16) |
|---|
| .. | .. |
|---|
| 672 | 648 | # define VC4_HDMI_CEC_CNT_TO_1700_US_MASK VC4_MASK(7, 0) |
|---|
| 673 | 649 | # define VC4_HDMI_CEC_CNT_TO_1700_US_SHIFT 0 |
|---|
| 674 | 650 | |
|---|
| 675 | | -#define VC4_HDMI_CEC_CNTRL_4 0x0f4 |
|---|
| 676 | 651 | # define VC4_HDMI_CEC_CNT_TO_4300_US_MASK VC4_MASK(31, 24) |
|---|
| 677 | 652 | # define VC4_HDMI_CEC_CNT_TO_4300_US_SHIFT 24 |
|---|
| 678 | 653 | # define VC4_HDMI_CEC_CNT_TO_3900_US_MASK VC4_MASK(23, 16) |
|---|
| .. | .. |
|---|
| 682 | 657 | # define VC4_HDMI_CEC_CNT_TO_3500_US_MASK VC4_MASK(7, 0) |
|---|
| 683 | 658 | # define VC4_HDMI_CEC_CNT_TO_3500_US_SHIFT 0 |
|---|
| 684 | 659 | |
|---|
| 685 | | -#define VC4_HDMI_CEC_CNTRL_5 0x0f8 |
|---|
| 686 | 660 | # define VC4_HDMI_CEC_TX_SW_RESET BIT(27) |
|---|
| 687 | 661 | # define VC4_HDMI_CEC_RX_SW_RESET BIT(26) |
|---|
| 688 | 662 | # define VC4_HDMI_CEC_PAD_SW_RESET BIT(25) |
|---|
| .. | .. |
|---|
| 695 | 669 | # define VC4_HDMI_CEC_CNT_TO_4500_US_MASK VC4_MASK(7, 0) |
|---|
| 696 | 670 | # define VC4_HDMI_CEC_CNT_TO_4500_US_SHIFT 0 |
|---|
| 697 | 671 | |
|---|
| 698 | | -/* Transmit data, first byte is low byte of the 32-bit reg. MSB of |
|---|
| 699 | | - * each byte transmitted first. |
|---|
| 700 | | - */ |
|---|
| 701 | | -#define VC4_HDMI_CEC_TX_DATA_1 0x0fc |
|---|
| 702 | | -#define VC4_HDMI_CEC_TX_DATA_2 0x100 |
|---|
| 703 | | -#define VC4_HDMI_CEC_TX_DATA_3 0x104 |
|---|
| 704 | | -#define VC4_HDMI_CEC_TX_DATA_4 0x108 |
|---|
| 705 | | -#define VC4_HDMI_CEC_RX_DATA_1 0x10c |
|---|
| 706 | | -#define VC4_HDMI_CEC_RX_DATA_2 0x110 |
|---|
| 707 | | -#define VC4_HDMI_CEC_RX_DATA_3 0x114 |
|---|
| 708 | | -#define VC4_HDMI_CEC_RX_DATA_4 0x118 |
|---|
| 709 | | - |
|---|
| 710 | | -#define VC4_HDMI_TX_PHY_RESET_CTL 0x2c0 |
|---|
| 711 | | - |
|---|
| 712 | | -#define VC4_HDMI_TX_PHY_CTL0 0x2c4 |
|---|
| 713 | 672 | # define VC4_HDMI_TX_PHY_RNG_PWRDN BIT(25) |
|---|
| 714 | 673 | |
|---|
| 715 | | -/* Interrupt status bits */ |
|---|
| 716 | | -#define VC4_HDMI_CPU_STATUS 0x340 |
|---|
| 717 | | -#define VC4_HDMI_CPU_SET 0x344 |
|---|
| 718 | | -#define VC4_HDMI_CPU_CLEAR 0x348 |
|---|
| 719 | 674 | # define VC4_HDMI_CPU_CEC BIT(6) |
|---|
| 720 | 675 | # define VC4_HDMI_CPU_HOTPLUG BIT(0) |
|---|
| 721 | 676 | |
|---|
| 722 | | -#define VC4_HDMI_CPU_MASK_STATUS 0x34c |
|---|
| 723 | | -#define VC4_HDMI_CPU_MASK_SET 0x350 |
|---|
| 724 | | -#define VC4_HDMI_CPU_MASK_CLEAR 0x354 |
|---|
| 725 | | - |
|---|
| 726 | | -#define VC4_HDMI_GCP(x) (0x400 + ((x) * 0x4)) |
|---|
| 727 | | -#define VC4_HDMI_RAM_PACKET(x) (0x400 + ((x) * 0x24)) |
|---|
| 728 | | -#define VC4_HDMI_PACKET_STRIDE 0x24 |
|---|
| 729 | | - |
|---|
| 730 | | -#define VC4_HD_M_CTL 0x00c |
|---|
| 731 | 677 | /* Debug: Current receive value on the CEC pad. */ |
|---|
| 732 | 678 | # define VC4_HD_CECRXD BIT(9) |
|---|
| 733 | 679 | /* Debug: Override CEC output to 0. */ |
|---|
| .. | .. |
|---|
| 737 | 683 | # define VC4_HD_M_SW_RST BIT(2) |
|---|
| 738 | 684 | # define VC4_HD_M_ENABLE BIT(0) |
|---|
| 739 | 685 | |
|---|
| 740 | | -#define VC4_HD_MAI_CTL 0x014 |
|---|
| 741 | 686 | /* Set when audio stream is received at a slower rate than the |
|---|
| 742 | 687 | * sampling period, so MAI fifo goes empty. Write 1 to clear. |
|---|
| 743 | 688 | */ |
|---|
| .. | .. |
|---|
| 762 | 707 | /* Single-shot reset bit. Read value is undefined. */ |
|---|
| 763 | 708 | # define VC4_HD_MAI_CTL_RESET BIT(0) |
|---|
| 764 | 709 | |
|---|
| 765 | | -#define VC4_HD_MAI_THR 0x018 |
|---|
| 766 | 710 | # define VC4_HD_MAI_THR_PANICHIGH_MASK VC4_MASK(29, 24) |
|---|
| 767 | 711 | # define VC4_HD_MAI_THR_PANICHIGH_SHIFT 24 |
|---|
| 768 | 712 | # define VC4_HD_MAI_THR_PANICLOW_MASK VC4_MASK(21, 16) |
|---|
| .. | .. |
|---|
| 772 | 716 | # define VC4_HD_MAI_THR_DREQLOW_MASK VC4_MASK(5, 0) |
|---|
| 773 | 717 | # define VC4_HD_MAI_THR_DREQLOW_SHIFT 0 |
|---|
| 774 | 718 | |
|---|
| 775 | | -/* Format header to be placed on the MAI data. Unused. */ |
|---|
| 776 | | -#define VC4_HD_MAI_FMT 0x01c |
|---|
| 777 | | - |
|---|
| 778 | | -/* Register for DMAing in audio data to be transported over the MAI |
|---|
| 779 | | - * bus to the Falcon core. |
|---|
| 780 | | - */ |
|---|
| 781 | | -#define VC4_HD_MAI_DATA 0x020 |
|---|
| 782 | | - |
|---|
| 783 | 719 | /* Divider from HDMI HSM clock to MAI serial clock. Sampling period |
|---|
| 784 | 720 | * converges to N / (M + 1) cycles. |
|---|
| 785 | 721 | */ |
|---|
| 786 | | -#define VC4_HD_MAI_SMP 0x02c |
|---|
| 787 | 722 | # define VC4_HD_MAI_SMP_N_MASK VC4_MASK(31, 8) |
|---|
| 788 | 723 | # define VC4_HD_MAI_SMP_N_SHIFT 8 |
|---|
| 789 | 724 | # define VC4_HD_MAI_SMP_M_MASK VC4_MASK(7, 0) |
|---|
| 790 | 725 | # define VC4_HD_MAI_SMP_M_SHIFT 0 |
|---|
| 791 | 726 | |
|---|
| 792 | | -#define VC4_HD_VID_CTL 0x038 |
|---|
| 793 | 727 | # define VC4_HD_VID_CTL_ENABLE BIT(31) |
|---|
| 794 | 728 | # define VC4_HD_VID_CTL_UNDERFLOW_ENABLE BIT(30) |
|---|
| 795 | 729 | # define VC4_HD_VID_CTL_FRAME_COUNTER_RESET BIT(29) |
|---|
| 796 | 730 | # define VC4_HD_VID_CTL_VSYNC_LOW BIT(28) |
|---|
| 797 | 731 | # define VC4_HD_VID_CTL_HSYNC_LOW BIT(27) |
|---|
| 732 | +# define VC4_HD_VID_CTL_CLRSYNC BIT(24) |
|---|
| 733 | +# define VC4_HD_VID_CTL_CLRRGB BIT(23) |
|---|
| 734 | +# define VC4_HD_VID_CTL_BLANKPIX BIT(18) |
|---|
| 798 | 735 | |
|---|
| 799 | | -#define VC4_HD_CSC_CTL 0x040 |
|---|
| 800 | 736 | # define VC4_HD_CSC_CTL_ORDER_MASK VC4_MASK(7, 5) |
|---|
| 801 | 737 | # define VC4_HD_CSC_CTL_ORDER_SHIFT 5 |
|---|
| 802 | 738 | # define VC4_HD_CSC_CTL_ORDER_RGB 0 |
|---|
| .. | .. |
|---|
| 814 | 750 | # define VC4_HD_CSC_CTL_RGB2YCC BIT(1) |
|---|
| 815 | 751 | # define VC4_HD_CSC_CTL_ENABLE BIT(0) |
|---|
| 816 | 752 | |
|---|
| 817 | | -#define VC4_HD_CSC_12_11 0x044 |
|---|
| 818 | | -#define VC4_HD_CSC_14_13 0x048 |
|---|
| 819 | | -#define VC4_HD_CSC_22_21 0x04c |
|---|
| 820 | | -#define VC4_HD_CSC_24_23 0x050 |
|---|
| 821 | | -#define VC4_HD_CSC_32_31 0x054 |
|---|
| 822 | | -#define VC4_HD_CSC_34_33 0x058 |
|---|
| 823 | | - |
|---|
| 824 | | -#define VC4_HD_FRAME_COUNT 0x068 |
|---|
| 753 | +# define VC4_DVP_HT_CLOCK_STOP_PIXEL BIT(1) |
|---|
| 825 | 754 | |
|---|
| 826 | 755 | /* HVS display list information. */ |
|---|
| 827 | 756 | #define HVS_BOOTLOADER_DLIST_END 32 |
|---|
| .. | .. |
|---|
| 848 | 777 | HVS_PIXEL_FORMAT_PALETTE = 13, |
|---|
| 849 | 778 | HVS_PIXEL_FORMAT_YUV444_RGB = 14, |
|---|
| 850 | 779 | HVS_PIXEL_FORMAT_AYUV444_RGB = 15, |
|---|
| 780 | + HVS_PIXEL_FORMAT_RGBA1010102 = 16, |
|---|
| 781 | + HVS_PIXEL_FORMAT_YCBCR_10BIT = 17, |
|---|
| 851 | 782 | }; |
|---|
| 852 | 783 | |
|---|
| 853 | 784 | /* Note: the LSB is the rightmost character shown. Only valid for |
|---|
| .. | .. |
|---|
| 902 | 833 | #define SCALER_CTL0_RGBA_EXPAND_MSB 2 |
|---|
| 903 | 834 | #define SCALER_CTL0_RGBA_EXPAND_ROUND 3 |
|---|
| 904 | 835 | |
|---|
| 836 | +#define SCALER5_CTL0_ALPHA_EXPAND BIT(12) |
|---|
| 837 | + |
|---|
| 838 | +#define SCALER5_CTL0_RGB_EXPAND BIT(11) |
|---|
| 839 | + |
|---|
| 905 | 840 | #define SCALER_CTL0_SCL1_MASK VC4_MASK(10, 8) |
|---|
| 906 | 841 | #define SCALER_CTL0_SCL1_SHIFT 8 |
|---|
| 907 | 842 | |
|---|
| .. | .. |
|---|
| 919 | 854 | |
|---|
| 920 | 855 | /* Set to indicate no scaling. */ |
|---|
| 921 | 856 | #define SCALER_CTL0_UNITY BIT(4) |
|---|
| 857 | +#define SCALER5_CTL0_UNITY BIT(15) |
|---|
| 922 | 858 | |
|---|
| 923 | 859 | #define SCALER_CTL0_PIXEL_FORMAT_MASK VC4_MASK(3, 0) |
|---|
| 924 | 860 | #define SCALER_CTL0_PIXEL_FORMAT_SHIFT 0 |
|---|
| 861 | + |
|---|
| 862 | +#define SCALER5_CTL0_PIXEL_FORMAT_MASK VC4_MASK(4, 0) |
|---|
| 925 | 863 | |
|---|
| 926 | 864 | #define SCALER_POS0_FIXED_ALPHA_MASK VC4_MASK(31, 24) |
|---|
| 927 | 865 | #define SCALER_POS0_FIXED_ALPHA_SHIFT 24 |
|---|
| .. | .. |
|---|
| 932 | 870 | #define SCALER_POS0_START_X_MASK VC4_MASK(11, 0) |
|---|
| 933 | 871 | #define SCALER_POS0_START_X_SHIFT 0 |
|---|
| 934 | 872 | |
|---|
| 873 | +#define SCALER5_POS0_START_Y_MASK VC4_MASK(27, 16) |
|---|
| 874 | +#define SCALER5_POS0_START_Y_SHIFT 16 |
|---|
| 875 | + |
|---|
| 876 | +#define SCALER5_POS0_START_X_MASK VC4_MASK(13, 0) |
|---|
| 877 | +#define SCALER5_POS0_START_X_SHIFT 0 |
|---|
| 878 | + |
|---|
| 879 | +#define SCALER5_POS0_VFLIP BIT(31) |
|---|
| 880 | +#define SCALER5_POS0_HFLIP BIT(15) |
|---|
| 881 | + |
|---|
| 882 | +#define SCALER5_CTL2_ALPHA_MODE_MASK VC4_MASK(31, 30) |
|---|
| 883 | +#define SCALER5_CTL2_ALPHA_MODE_SHIFT 30 |
|---|
| 884 | +#define SCALER5_CTL2_ALPHA_MODE_PIPELINE 0 |
|---|
| 885 | +#define SCALER5_CTL2_ALPHA_MODE_FIXED 1 |
|---|
| 886 | +#define SCALER5_CTL2_ALPHA_MODE_FIXED_NONZERO 2 |
|---|
| 887 | +#define SCALER5_CTL2_ALPHA_MODE_FIXED_OVER_0x07 3 |
|---|
| 888 | + |
|---|
| 889 | +#define SCALER5_CTL2_ALPHA_PREMULT BIT(29) |
|---|
| 890 | + |
|---|
| 891 | +#define SCALER5_CTL2_ALPHA_MIX BIT(28) |
|---|
| 892 | + |
|---|
| 893 | +#define SCALER5_CTL2_ALPHA_LOC BIT(25) |
|---|
| 894 | + |
|---|
| 895 | +#define SCALER5_CTL2_MAP_SEL_MASK VC4_MASK(18, 17) |
|---|
| 896 | +#define SCALER5_CTL2_MAP_SEL_SHIFT 17 |
|---|
| 897 | + |
|---|
| 898 | +#define SCALER5_CTL2_GAMMA BIT(16) |
|---|
| 899 | + |
|---|
| 900 | +#define SCALER5_CTL2_ALPHA_MASK VC4_MASK(15, 4) |
|---|
| 901 | +#define SCALER5_CTL2_ALPHA_SHIFT 4 |
|---|
| 902 | + |
|---|
| 935 | 903 | #define SCALER_POS1_SCL_HEIGHT_MASK VC4_MASK(27, 16) |
|---|
| 936 | 904 | #define SCALER_POS1_SCL_HEIGHT_SHIFT 16 |
|---|
| 937 | 905 | |
|---|
| 938 | 906 | #define SCALER_POS1_SCL_WIDTH_MASK VC4_MASK(11, 0) |
|---|
| 939 | 907 | #define SCALER_POS1_SCL_WIDTH_SHIFT 0 |
|---|
| 908 | + |
|---|
| 909 | +#define SCALER5_POS1_SCL_HEIGHT_MASK VC4_MASK(28, 16) |
|---|
| 910 | +#define SCALER5_POS1_SCL_HEIGHT_SHIFT 16 |
|---|
| 911 | + |
|---|
| 912 | +#define SCALER5_POS1_SCL_WIDTH_MASK VC4_MASK(12, 0) |
|---|
| 913 | +#define SCALER5_POS1_SCL_WIDTH_SHIFT 0 |
|---|
| 940 | 914 | |
|---|
| 941 | 915 | #define SCALER_POS2_ALPHA_MODE_MASK VC4_MASK(31, 30) |
|---|
| 942 | 916 | #define SCALER_POS2_ALPHA_MODE_SHIFT 30 |
|---|
| .. | .. |
|---|
| 952 | 926 | |
|---|
| 953 | 927 | #define SCALER_POS2_WIDTH_MASK VC4_MASK(11, 0) |
|---|
| 954 | 928 | #define SCALER_POS2_WIDTH_SHIFT 0 |
|---|
| 929 | + |
|---|
| 930 | +#define SCALER5_POS2_HEIGHT_MASK VC4_MASK(28, 16) |
|---|
| 931 | +#define SCALER5_POS2_HEIGHT_SHIFT 16 |
|---|
| 932 | + |
|---|
| 933 | +#define SCALER5_POS2_WIDTH_MASK VC4_MASK(12, 0) |
|---|
| 934 | +#define SCALER5_POS2_WIDTH_SHIFT 0 |
|---|
| 955 | 935 | |
|---|
| 956 | 936 | /* Color Space Conversion words. Some values are S2.8 signed |
|---|
| 957 | 937 | * integers, except that the 2 integer bits map as {0x0: 0, 0x1: 1, |
|---|
| .. | .. |
|---|
| 1037 | 1017 | #define SCALER_TILE_HEIGHT_MASK VC4_MASK(15, 0) |
|---|
| 1038 | 1018 | #define SCALER_TILE_HEIGHT_SHIFT 0 |
|---|
| 1039 | 1019 | |
|---|
| 1020 | +/* Common PITCH0 fields */ |
|---|
| 1021 | +#define SCALER_PITCH0_SINK_PIX_MASK VC4_MASK(31, 26) |
|---|
| 1022 | +#define SCALER_PITCH0_SINK_PIX_SHIFT 26 |
|---|
| 1023 | + |
|---|
| 1040 | 1024 | /* PITCH0 fields for T-tiled. */ |
|---|
| 1041 | 1025 | #define SCALER_PITCH0_TILE_WIDTH_L_MASK VC4_MASK(22, 16) |
|---|
| 1042 | 1026 | #define SCALER_PITCH0_TILE_WIDTH_L_SHIFT 16 |
|---|
| 1043 | 1027 | #define SCALER_PITCH0_TILE_LINE_DIR BIT(15) |
|---|
| 1044 | 1028 | #define SCALER_PITCH0_TILE_INITIAL_LINE_DIR BIT(14) |
|---|
| 1045 | 1029 | /* Y offset within a tile. */ |
|---|
| 1046 | | -#define SCALER_PITCH0_TILE_Y_OFFSET_MASK VC4_MASK(13, 7) |
|---|
| 1047 | | -#define SCALER_PITCH0_TILE_Y_OFFSET_SHIFT 7 |
|---|
| 1030 | +#define SCALER_PITCH0_TILE_Y_OFFSET_MASK VC4_MASK(13, 8) |
|---|
| 1031 | +#define SCALER_PITCH0_TILE_Y_OFFSET_SHIFT 8 |
|---|
| 1048 | 1032 | #define SCALER_PITCH0_TILE_WIDTH_R_MASK VC4_MASK(6, 0) |
|---|
| 1049 | 1033 | #define SCALER_PITCH0_TILE_WIDTH_R_SHIFT 0 |
|---|
| 1050 | 1034 | |
|---|