| .. | .. |
|---|
| 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) |
|---|
| 220 | 223 | # define SCALER_DISPCTRL_DSP3_MUX_MASK VC4_MASK(19, 18) |
|---|
| 221 | 224 | # define SCALER_DISPCTRL_DSP3_MUX_SHIFT 18 |
|---|
| 222 | 225 | |
|---|
| .. | .. |
|---|
| 224 | 227 | * SCALER_DISPSTAT_IRQDISP0. Note that short frame contributions are |
|---|
| 225 | 228 | * always enabled. |
|---|
| 226 | 229 | */ |
|---|
| 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) |
|---|
| 230 | +# define SCALER_DISPCTRL_DSPEISLUR(x) BIT(13 + (x)) |
|---|
| 232 | 231 | /* Enables Display 0 end-of-line-N contribution to |
|---|
| 233 | 232 | * SCALER_DISPSTAT_IRQDISP0 |
|---|
| 234 | 233 | */ |
|---|
| 235 | | -# define SCALER_DISPCTRL_DSP0EIEOLN BIT(8) |
|---|
| 234 | +# define SCALER_DISPCTRL_DSPEIEOLN(x) BIT(8 + ((x) * 2)) |
|---|
| 236 | 235 | /* Enables Display 0 EOF contribution to SCALER_DISPSTAT_IRQDISP0 */ |
|---|
| 237 | | -# define SCALER_DISPCTRL_DSP0EIEOF BIT(7) |
|---|
| 236 | +# define SCALER_DISPCTRL_DSPEIEOF(x) BIT(7 + ((x) * 2)) |
|---|
| 238 | 237 | |
|---|
| 239 | 238 | # define SCALER_DISPCTRL_SLVRDEIRQ BIT(6) |
|---|
| 240 | 239 | # define SCALER_DISPCTRL_SLVWREIRQ BIT(5) |
|---|
| 241 | 240 | # define SCALER_DISPCTRL_DMAEIRQ BIT(4) |
|---|
| 242 | | -# define SCALER_DISPCTRL_DISP2EIRQ BIT(3) |
|---|
| 243 | | -# define SCALER_DISPCTRL_DISP1EIRQ BIT(2) |
|---|
| 244 | 241 | /* Enables interrupt generation on the enabled EOF/EOLN/EISLUR |
|---|
| 245 | 242 | * bits and short frames.. |
|---|
| 246 | 243 | */ |
|---|
| 247 | | -# define SCALER_DISPCTRL_DISP0EIRQ BIT(1) |
|---|
| 244 | +# define SCALER_DISPCTRL_DISPEIRQ(x) BIT(1 + (x)) |
|---|
| 248 | 245 | /* Enables interrupt generation on scaler profiler interrupt. */ |
|---|
| 249 | 246 | # define SCALER_DISPCTRL_SCLEIRQ BIT(0) |
|---|
| 250 | 247 | |
|---|
| 251 | 248 | #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 | 249 | # define SCALER_DISPSTAT_RESP_MASK VC4_MASK(15, 14) |
|---|
| 267 | 250 | # define SCALER_DISPSTAT_RESP_SHIFT 14 |
|---|
| 268 | 251 | # define SCALER_DISPSTAT_RESP_OKAY 0 |
|---|
| .. | .. |
|---|
| 270 | 253 | # define SCALER_DISPSTAT_RESP_SLVERR 2 |
|---|
| 271 | 254 | # define SCALER_DISPSTAT_RESP_DECERR 3 |
|---|
| 272 | 255 | |
|---|
| 273 | | -# define SCALER_DISPSTAT_COBLOW0 BIT(13) |
|---|
| 256 | +# define SCALER_DISPSTAT_COBLOW(x) BIT(13 + ((x) * 8)) |
|---|
| 274 | 257 | /* Set when the DISPEOLN line is done compositing. */ |
|---|
| 275 | | -# define SCALER_DISPSTAT_EOLN0 BIT(12) |
|---|
| 258 | +# define SCALER_DISPSTAT_EOLN(x) BIT(12 + ((x) * 8)) |
|---|
| 276 | 259 | /* Set when VSTART is seen but there are still pixels in the current |
|---|
| 277 | 260 | * output line. |
|---|
| 278 | 261 | */ |
|---|
| 279 | | -# define SCALER_DISPSTAT_ESFRAME0 BIT(11) |
|---|
| 262 | +# define SCALER_DISPSTAT_ESFRAME(x) BIT(11 + ((x) * 8)) |
|---|
| 280 | 263 | /* Set when HSTART is seen but there are still pixels in the current |
|---|
| 281 | 264 | * output line. |
|---|
| 282 | 265 | */ |
|---|
| 283 | | -# define SCALER_DISPSTAT_ESLINE0 BIT(10) |
|---|
| 266 | +# define SCALER_DISPSTAT_ESLINE(x) BIT(10 + ((x) * 8)) |
|---|
| 284 | 267 | /* Set when the the downstream tries to read from the display FIFO |
|---|
| 285 | 268 | * while it's empty. |
|---|
| 286 | 269 | */ |
|---|
| 287 | | -# define SCALER_DISPSTAT_EUFLOW0 BIT(9) |
|---|
| 270 | +# define SCALER_DISPSTAT_EUFLOW(x) BIT(9 + ((x) * 8)) |
|---|
| 288 | 271 | /* Set when the display mode changes from RUN to EOF */ |
|---|
| 289 | | -# define SCALER_DISPSTAT_EOF0 BIT(8) |
|---|
| 272 | +# define SCALER_DISPSTAT_EOF(x) BIT(8 + ((x) * 8)) |
|---|
| 273 | + |
|---|
| 274 | +# define SCALER_DISPSTAT_IRQMASK(x) VC4_MASK(13 + ((x) * 8), \ |
|---|
| 275 | + 8 + ((x) * 8)) |
|---|
| 290 | 276 | |
|---|
| 291 | 277 | /* Set on AXI invalid DMA ID error. */ |
|---|
| 292 | 278 | # define SCALER_DISPSTAT_DMA_ERROR BIT(7) |
|---|
| .. | .. |
|---|
| 298 | 284 | * SCALER_DISPSTAT_RESP_ERROR is not SCALER_DISPSTAT_RESP_OKAY. |
|---|
| 299 | 285 | */ |
|---|
| 300 | 286 | # define SCALER_DISPSTAT_IRQDMA BIT(4) |
|---|
| 301 | | -# define SCALER_DISPSTAT_IRQDISP2 BIT(3) |
|---|
| 302 | | -# define SCALER_DISPSTAT_IRQDISP1 BIT(2) |
|---|
| 303 | 287 | /* Set when any of the EOF/EOLN/ESFRAME/ESLINE bits are set and their |
|---|
| 304 | 288 | * corresponding interrupt bit is enabled in DISPCTRL. |
|---|
| 305 | 289 | */ |
|---|
| 306 | | -# define SCALER_DISPSTAT_IRQDISP0 BIT(1) |
|---|
| 290 | +# define SCALER_DISPSTAT_IRQDISP(x) BIT(1 + (x)) |
|---|
| 307 | 291 | /* On read, the profiler interrupt. On write, clear *all* interrupt bits. */ |
|---|
| 308 | 292 | # define SCALER_DISPSTAT_IRQSCL BIT(0) |
|---|
| 309 | 293 | |
|---|
| 310 | 294 | #define SCALER_DISPID 0x00000008 |
|---|
| 311 | 295 | #define SCALER_DISPECTRL 0x0000000c |
|---|
| 296 | +# define SCALER_DISPECTRL_DSP2_MUX_SHIFT 31 |
|---|
| 297 | +# define SCALER_DISPECTRL_DSP2_MUX_MASK VC4_MASK(31, 31) |
|---|
| 298 | + |
|---|
| 312 | 299 | #define SCALER_DISPPROF 0x00000010 |
|---|
| 300 | + |
|---|
| 313 | 301 | #define SCALER_DISPDITHER 0x00000014 |
|---|
| 302 | +# define SCALER_DISPDITHER_DSP5_MUX_SHIFT 30 |
|---|
| 303 | +# define SCALER_DISPDITHER_DSP5_MUX_MASK VC4_MASK(31, 30) |
|---|
| 304 | + |
|---|
| 314 | 305 | #define SCALER_DISPEOLN 0x00000018 |
|---|
| 306 | +# define SCALER_DISPEOLN_DSP4_MUX_SHIFT 30 |
|---|
| 307 | +# define SCALER_DISPEOLN_DSP4_MUX_MASK VC4_MASK(31, 30) |
|---|
| 308 | + |
|---|
| 315 | 309 | #define SCALER_DISPLIST0 0x00000020 |
|---|
| 316 | 310 | #define SCALER_DISPLIST1 0x00000024 |
|---|
| 317 | 311 | #define SCALER_DISPLIST2 0x00000028 |
|---|
| .. | .. |
|---|
| 349 | 343 | # define SCALER_DISPCTRLX_WIDTH_SHIFT 12 |
|---|
| 350 | 344 | # define SCALER_DISPCTRLX_HEIGHT_MASK VC4_MASK(11, 0) |
|---|
| 351 | 345 | # define SCALER_DISPCTRLX_HEIGHT_SHIFT 0 |
|---|
| 346 | + |
|---|
| 347 | +# define SCALER5_DISPCTRLX_WIDTH_MASK VC4_MASK(28, 16) |
|---|
| 348 | +# define SCALER5_DISPCTRLX_WIDTH_SHIFT 16 |
|---|
| 349 | +/* Generates a single frame when VSTART is seen and stops at the last |
|---|
| 350 | + * pixel read from the FIFO. |
|---|
| 351 | + */ |
|---|
| 352 | +# define SCALER5_DISPCTRLX_ONESHOT BIT(15) |
|---|
| 353 | +/* Processes a single context in the dlist and then task switch, |
|---|
| 354 | + * instead of an entire line. |
|---|
| 355 | + */ |
|---|
| 356 | +# define SCALER5_DISPCTRLX_ONECTX_MASK VC4_MASK(14, 13) |
|---|
| 357 | +# define SCALER5_DISPCTRLX_ONECTX_SHIFT 13 |
|---|
| 358 | +# define SCALER5_DISPCTRLX_HEIGHT_MASK VC4_MASK(12, 0) |
|---|
| 359 | +# define SCALER5_DISPCTRLX_HEIGHT_SHIFT 0 |
|---|
| 352 | 360 | |
|---|
| 353 | 361 | #define SCALER_DISPBKGND0 0x00000044 |
|---|
| 354 | 362 | # define SCALER_DISPBKGND_AUTOHS BIT(31) |
|---|
| .. | .. |
|---|
| 483 | 491 | #define SCALER_DLIST_START 0x00002000 |
|---|
| 484 | 492 | #define SCALER_DLIST_SIZE 0x00004000 |
|---|
| 485 | 493 | |
|---|
| 486 | | -#define VC4_HDMI_CORE_REV 0x000 |
|---|
| 494 | +#define SCALER5_DLIST_START 0x00004000 |
|---|
| 487 | 495 | |
|---|
| 488 | | -#define VC4_HDMI_SW_RESET_CONTROL 0x004 |
|---|
| 489 | 496 | # define VC4_HDMI_SW_RESET_FORMAT_DETECT BIT(1) |
|---|
| 490 | 497 | # define VC4_HDMI_SW_RESET_HDMI BIT(0) |
|---|
| 491 | 498 | |
|---|
| 492 | | -#define VC4_HDMI_HOTPLUG_INT 0x008 |
|---|
| 493 | | - |
|---|
| 494 | | -#define VC4_HDMI_HOTPLUG 0x00c |
|---|
| 495 | 499 | # define VC4_HDMI_HOTPLUG_CONNECTED BIT(0) |
|---|
| 496 | 500 | |
|---|
| 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 | 501 | # define VC4_HDMI_MAI_CONFIG_FORMAT_REVERSE BIT(27) |
|---|
| 504 | 502 | # define VC4_HDMI_MAI_CONFIG_BIT_REVERSE BIT(26) |
|---|
| 505 | 503 | # define VC4_HDMI_MAI_CHANNEL_MASK_MASK VC4_MASK(15, 0) |
|---|
| 506 | 504 | # define VC4_HDMI_MAI_CHANNEL_MASK_SHIFT 0 |
|---|
| 507 | 505 | |
|---|
| 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 | 506 | # define VC4_HDMI_AUDIO_PACKET_ZERO_DATA_ON_SAMPLE_FLAT BIT(29) |
|---|
| 513 | 507 | # define VC4_HDMI_AUDIO_PACKET_ZERO_DATA_ON_INACTIVE_CHANNELS BIT(24) |
|---|
| 514 | 508 | # define VC4_HDMI_AUDIO_PACKET_FORCE_SAMPLE_PRESENT BIT(19) |
|---|
| .. | .. |
|---|
| 522 | 516 | # define VC4_HDMI_AUDIO_PACKET_CEA_MASK_MASK VC4_MASK(7, 0) |
|---|
| 523 | 517 | # define VC4_HDMI_AUDIO_PACKET_CEA_MASK_SHIFT 0 |
|---|
| 524 | 518 | |
|---|
| 525 | | -#define VC4_HDMI_RAM_PACKET_CONFIG 0x0a0 |
|---|
| 526 | 519 | # define VC4_HDMI_RAM_PACKET_ENABLE BIT(16) |
|---|
| 527 | 520 | |
|---|
| 528 | | -#define VC4_HDMI_RAM_PACKET_STATUS 0x0a4 |
|---|
| 529 | | - |
|---|
| 530 | | -#define VC4_HDMI_CRP_CFG 0x0a8 |
|---|
| 531 | 521 | /* When set, the CTS_PERIOD counts based on MAI bus sync pulse instead |
|---|
| 532 | 522 | * of pixel clock. |
|---|
| 533 | 523 | */ |
|---|
| .. | .. |
|---|
| 541 | 531 | # define VC4_HDMI_CRP_CFG_N_MASK VC4_MASK(19, 0) |
|---|
| 542 | 532 | # define VC4_HDMI_CRP_CFG_N_SHIFT 0 |
|---|
| 543 | 533 | |
|---|
| 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 | 534 | # define VC4_HDMI_HORZA_VPOS BIT(14) |
|---|
| 555 | 535 | # define VC4_HDMI_HORZA_HPOS BIT(13) |
|---|
| 556 | 536 | /* Horizontal active pixels (hdisplay). */ |
|---|
| 557 | 537 | # define VC4_HDMI_HORZA_HAP_MASK VC4_MASK(12, 0) |
|---|
| 558 | 538 | # define VC4_HDMI_HORZA_HAP_SHIFT 0 |
|---|
| 559 | 539 | |
|---|
| 560 | | -#define VC4_HDMI_HORZB 0x0c8 |
|---|
| 561 | 540 | /* Horizontal pack porch (htotal - hsync_end). */ |
|---|
| 562 | 541 | # define VC4_HDMI_HORZB_HBP_MASK VC4_MASK(29, 20) |
|---|
| 563 | 542 | # define VC4_HDMI_HORZB_HBP_SHIFT 20 |
|---|
| .. | .. |
|---|
| 568 | 547 | # define VC4_HDMI_HORZB_HFP_MASK VC4_MASK(9, 0) |
|---|
| 569 | 548 | # define VC4_HDMI_HORZB_HFP_SHIFT 0 |
|---|
| 570 | 549 | |
|---|
| 571 | | -#define VC4_HDMI_FIFO_CTL 0x05c |
|---|
| 572 | 550 | # define VC4_HDMI_FIFO_CTL_RECENTER_DONE BIT(14) |
|---|
| 573 | 551 | # define VC4_HDMI_FIFO_CTL_USE_EMPTY BIT(13) |
|---|
| 574 | 552 | # define VC4_HDMI_FIFO_CTL_ON_VB BIT(7) |
|---|
| .. | .. |
|---|
| 581 | 559 | # define VC4_HDMI_FIFO_CTL_MASTER_SLAVE_N BIT(0) |
|---|
| 582 | 560 | # define VC4_HDMI_FIFO_VALID_WRITE_MASK 0xefff |
|---|
| 583 | 561 | |
|---|
| 584 | | -#define VC4_HDMI_SCHEDULER_CONTROL 0x0c0 |
|---|
| 585 | 562 | # define VC4_HDMI_SCHEDULER_CONTROL_MANUAL_FORMAT BIT(15) |
|---|
| 586 | 563 | # define VC4_HDMI_SCHEDULER_CONTROL_IGNORE_VSYNC_PREDICTS BIT(5) |
|---|
| 587 | 564 | # define VC4_HDMI_SCHEDULER_CONTROL_VERT_ALWAYS_KEEPOUT BIT(3) |
|---|
| 588 | 565 | # define VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE BIT(1) |
|---|
| 589 | 566 | # define VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI BIT(0) |
|---|
| 590 | 567 | |
|---|
| 591 | | -#define VC4_HDMI_VERTA0 0x0cc |
|---|
| 592 | | -#define VC4_HDMI_VERTA1 0x0d4 |
|---|
| 593 | 568 | /* Vertical sync pulse (vsync_end - vsync_start). */ |
|---|
| 594 | 569 | # define VC4_HDMI_VERTA_VSP_MASK VC4_MASK(24, 20) |
|---|
| 595 | 570 | # define VC4_HDMI_VERTA_VSP_SHIFT 20 |
|---|
| .. | .. |
|---|
| 600 | 575 | # define VC4_HDMI_VERTA_VAL_MASK VC4_MASK(12, 0) |
|---|
| 601 | 576 | # define VC4_HDMI_VERTA_VAL_SHIFT 0 |
|---|
| 602 | 577 | |
|---|
| 603 | | -#define VC4_HDMI_VERTB0 0x0d0 |
|---|
| 604 | | -#define VC4_HDMI_VERTB1 0x0d8 |
|---|
| 605 | 578 | /* Vertical sync pulse offset (for interlaced) */ |
|---|
| 606 | 579 | # define VC4_HDMI_VERTB_VSPO_MASK VC4_MASK(21, 9) |
|---|
| 607 | 580 | # define VC4_HDMI_VERTB_VSPO_SHIFT 9 |
|---|
| .. | .. |
|---|
| 609 | 582 | # define VC4_HDMI_VERTB_VBP_MASK VC4_MASK(8, 0) |
|---|
| 610 | 583 | # define VC4_HDMI_VERTB_VBP_SHIFT 0 |
|---|
| 611 | 584 | |
|---|
| 612 | | -#define VC4_HDMI_CEC_CNTRL_1 0x0e8 |
|---|
| 613 | 585 | /* Set when the transmission has ended. */ |
|---|
| 614 | 586 | # define VC4_HDMI_CEC_TX_EOM BIT(31) |
|---|
| 615 | 587 | /* If set, transmission was acked on the 1st or 2nd attempt (only one |
|---|
| .. | .. |
|---|
| 650 | 622 | /* Set these fields to how many bit clock cycles get to that many |
|---|
| 651 | 623 | * microseconds. |
|---|
| 652 | 624 | */ |
|---|
| 653 | | -#define VC4_HDMI_CEC_CNTRL_2 0x0ec |
|---|
| 654 | 625 | # define VC4_HDMI_CEC_CNT_TO_1500_US_MASK VC4_MASK(30, 24) |
|---|
| 655 | 626 | # define VC4_HDMI_CEC_CNT_TO_1500_US_SHIFT 24 |
|---|
| 656 | 627 | # define VC4_HDMI_CEC_CNT_TO_1300_US_MASK VC4_MASK(23, 17) |
|---|
| .. | .. |
|---|
| 662 | 633 | # define VC4_HDMI_CEC_CNT_TO_400_US_MASK VC4_MASK(4, 0) |
|---|
| 663 | 634 | # define VC4_HDMI_CEC_CNT_TO_400_US_SHIFT 0 |
|---|
| 664 | 635 | |
|---|
| 665 | | -#define VC4_HDMI_CEC_CNTRL_3 0x0f0 |
|---|
| 666 | 636 | # define VC4_HDMI_CEC_CNT_TO_2750_US_MASK VC4_MASK(31, 24) |
|---|
| 667 | 637 | # define VC4_HDMI_CEC_CNT_TO_2750_US_SHIFT 24 |
|---|
| 668 | 638 | # define VC4_HDMI_CEC_CNT_TO_2400_US_MASK VC4_MASK(23, 16) |
|---|
| .. | .. |
|---|
| 672 | 642 | # define VC4_HDMI_CEC_CNT_TO_1700_US_MASK VC4_MASK(7, 0) |
|---|
| 673 | 643 | # define VC4_HDMI_CEC_CNT_TO_1700_US_SHIFT 0 |
|---|
| 674 | 644 | |
|---|
| 675 | | -#define VC4_HDMI_CEC_CNTRL_4 0x0f4 |
|---|
| 676 | 645 | # define VC4_HDMI_CEC_CNT_TO_4300_US_MASK VC4_MASK(31, 24) |
|---|
| 677 | 646 | # define VC4_HDMI_CEC_CNT_TO_4300_US_SHIFT 24 |
|---|
| 678 | 647 | # define VC4_HDMI_CEC_CNT_TO_3900_US_MASK VC4_MASK(23, 16) |
|---|
| .. | .. |
|---|
| 682 | 651 | # define VC4_HDMI_CEC_CNT_TO_3500_US_MASK VC4_MASK(7, 0) |
|---|
| 683 | 652 | # define VC4_HDMI_CEC_CNT_TO_3500_US_SHIFT 0 |
|---|
| 684 | 653 | |
|---|
| 685 | | -#define VC4_HDMI_CEC_CNTRL_5 0x0f8 |
|---|
| 686 | 654 | # define VC4_HDMI_CEC_TX_SW_RESET BIT(27) |
|---|
| 687 | 655 | # define VC4_HDMI_CEC_RX_SW_RESET BIT(26) |
|---|
| 688 | 656 | # define VC4_HDMI_CEC_PAD_SW_RESET BIT(25) |
|---|
| .. | .. |
|---|
| 695 | 663 | # define VC4_HDMI_CEC_CNT_TO_4500_US_MASK VC4_MASK(7, 0) |
|---|
| 696 | 664 | # define VC4_HDMI_CEC_CNT_TO_4500_US_SHIFT 0 |
|---|
| 697 | 665 | |
|---|
| 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 | 666 | # define VC4_HDMI_TX_PHY_RNG_PWRDN BIT(25) |
|---|
| 714 | 667 | |
|---|
| 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 | 668 | # define VC4_HDMI_CPU_CEC BIT(6) |
|---|
| 720 | 669 | # define VC4_HDMI_CPU_HOTPLUG BIT(0) |
|---|
| 721 | 670 | |
|---|
| 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 | 671 | /* Debug: Current receive value on the CEC pad. */ |
|---|
| 732 | 672 | # define VC4_HD_CECRXD BIT(9) |
|---|
| 733 | 673 | /* Debug: Override CEC output to 0. */ |
|---|
| .. | .. |
|---|
| 737 | 677 | # define VC4_HD_M_SW_RST BIT(2) |
|---|
| 738 | 678 | # define VC4_HD_M_ENABLE BIT(0) |
|---|
| 739 | 679 | |
|---|
| 740 | | -#define VC4_HD_MAI_CTL 0x014 |
|---|
| 741 | 680 | /* Set when audio stream is received at a slower rate than the |
|---|
| 742 | 681 | * sampling period, so MAI fifo goes empty. Write 1 to clear. |
|---|
| 743 | 682 | */ |
|---|
| .. | .. |
|---|
| 762 | 701 | /* Single-shot reset bit. Read value is undefined. */ |
|---|
| 763 | 702 | # define VC4_HD_MAI_CTL_RESET BIT(0) |
|---|
| 764 | 703 | |
|---|
| 765 | | -#define VC4_HD_MAI_THR 0x018 |
|---|
| 766 | 704 | # define VC4_HD_MAI_THR_PANICHIGH_MASK VC4_MASK(29, 24) |
|---|
| 767 | 705 | # define VC4_HD_MAI_THR_PANICHIGH_SHIFT 24 |
|---|
| 768 | 706 | # define VC4_HD_MAI_THR_PANICLOW_MASK VC4_MASK(21, 16) |
|---|
| .. | .. |
|---|
| 772 | 710 | # define VC4_HD_MAI_THR_DREQLOW_MASK VC4_MASK(5, 0) |
|---|
| 773 | 711 | # define VC4_HD_MAI_THR_DREQLOW_SHIFT 0 |
|---|
| 774 | 712 | |
|---|
| 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 | 713 | /* Divider from HDMI HSM clock to MAI serial clock. Sampling period |
|---|
| 784 | 714 | * converges to N / (M + 1) cycles. |
|---|
| 785 | 715 | */ |
|---|
| 786 | | -#define VC4_HD_MAI_SMP 0x02c |
|---|
| 787 | 716 | # define VC4_HD_MAI_SMP_N_MASK VC4_MASK(31, 8) |
|---|
| 788 | 717 | # define VC4_HD_MAI_SMP_N_SHIFT 8 |
|---|
| 789 | 718 | # define VC4_HD_MAI_SMP_M_MASK VC4_MASK(7, 0) |
|---|
| 790 | 719 | # define VC4_HD_MAI_SMP_M_SHIFT 0 |
|---|
| 791 | 720 | |
|---|
| 792 | | -#define VC4_HD_VID_CTL 0x038 |
|---|
| 793 | 721 | # define VC4_HD_VID_CTL_ENABLE BIT(31) |
|---|
| 794 | 722 | # define VC4_HD_VID_CTL_UNDERFLOW_ENABLE BIT(30) |
|---|
| 795 | 723 | # define VC4_HD_VID_CTL_FRAME_COUNTER_RESET BIT(29) |
|---|
| 796 | 724 | # define VC4_HD_VID_CTL_VSYNC_LOW BIT(28) |
|---|
| 797 | 725 | # define VC4_HD_VID_CTL_HSYNC_LOW BIT(27) |
|---|
| 726 | +# define VC4_HD_VID_CTL_CLRSYNC BIT(24) |
|---|
| 727 | +# define VC4_HD_VID_CTL_CLRRGB BIT(23) |
|---|
| 728 | +# define VC4_HD_VID_CTL_BLANKPIX BIT(18) |
|---|
| 798 | 729 | |
|---|
| 799 | | -#define VC4_HD_CSC_CTL 0x040 |
|---|
| 800 | 730 | # define VC4_HD_CSC_CTL_ORDER_MASK VC4_MASK(7, 5) |
|---|
| 801 | 731 | # define VC4_HD_CSC_CTL_ORDER_SHIFT 5 |
|---|
| 802 | 732 | # define VC4_HD_CSC_CTL_ORDER_RGB 0 |
|---|
| .. | .. |
|---|
| 814 | 744 | # define VC4_HD_CSC_CTL_RGB2YCC BIT(1) |
|---|
| 815 | 745 | # define VC4_HD_CSC_CTL_ENABLE BIT(0) |
|---|
| 816 | 746 | |
|---|
| 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 |
|---|
| 747 | +# define VC4_DVP_HT_CLOCK_STOP_PIXEL BIT(1) |
|---|
| 825 | 748 | |
|---|
| 826 | 749 | /* HVS display list information. */ |
|---|
| 827 | 750 | #define HVS_BOOTLOADER_DLIST_END 32 |
|---|
| .. | .. |
|---|
| 848 | 771 | HVS_PIXEL_FORMAT_PALETTE = 13, |
|---|
| 849 | 772 | HVS_PIXEL_FORMAT_YUV444_RGB = 14, |
|---|
| 850 | 773 | HVS_PIXEL_FORMAT_AYUV444_RGB = 15, |
|---|
| 774 | + HVS_PIXEL_FORMAT_RGBA1010102 = 16, |
|---|
| 775 | + HVS_PIXEL_FORMAT_YCBCR_10BIT = 17, |
|---|
| 851 | 776 | }; |
|---|
| 852 | 777 | |
|---|
| 853 | 778 | /* Note: the LSB is the rightmost character shown. Only valid for |
|---|
| .. | .. |
|---|
| 902 | 827 | #define SCALER_CTL0_RGBA_EXPAND_MSB 2 |
|---|
| 903 | 828 | #define SCALER_CTL0_RGBA_EXPAND_ROUND 3 |
|---|
| 904 | 829 | |
|---|
| 830 | +#define SCALER5_CTL0_ALPHA_EXPAND BIT(12) |
|---|
| 831 | + |
|---|
| 832 | +#define SCALER5_CTL0_RGB_EXPAND BIT(11) |
|---|
| 833 | + |
|---|
| 905 | 834 | #define SCALER_CTL0_SCL1_MASK VC4_MASK(10, 8) |
|---|
| 906 | 835 | #define SCALER_CTL0_SCL1_SHIFT 8 |
|---|
| 907 | 836 | |
|---|
| .. | .. |
|---|
| 919 | 848 | |
|---|
| 920 | 849 | /* Set to indicate no scaling. */ |
|---|
| 921 | 850 | #define SCALER_CTL0_UNITY BIT(4) |
|---|
| 851 | +#define SCALER5_CTL0_UNITY BIT(15) |
|---|
| 922 | 852 | |
|---|
| 923 | 853 | #define SCALER_CTL0_PIXEL_FORMAT_MASK VC4_MASK(3, 0) |
|---|
| 924 | 854 | #define SCALER_CTL0_PIXEL_FORMAT_SHIFT 0 |
|---|
| 855 | + |
|---|
| 856 | +#define SCALER5_CTL0_PIXEL_FORMAT_MASK VC4_MASK(4, 0) |
|---|
| 925 | 857 | |
|---|
| 926 | 858 | #define SCALER_POS0_FIXED_ALPHA_MASK VC4_MASK(31, 24) |
|---|
| 927 | 859 | #define SCALER_POS0_FIXED_ALPHA_SHIFT 24 |
|---|
| .. | .. |
|---|
| 932 | 864 | #define SCALER_POS0_START_X_MASK VC4_MASK(11, 0) |
|---|
| 933 | 865 | #define SCALER_POS0_START_X_SHIFT 0 |
|---|
| 934 | 866 | |
|---|
| 867 | +#define SCALER5_POS0_START_Y_MASK VC4_MASK(27, 16) |
|---|
| 868 | +#define SCALER5_POS0_START_Y_SHIFT 16 |
|---|
| 869 | + |
|---|
| 870 | +#define SCALER5_POS0_START_X_MASK VC4_MASK(13, 0) |
|---|
| 871 | +#define SCALER5_POS0_START_X_SHIFT 0 |
|---|
| 872 | + |
|---|
| 873 | +#define SCALER5_POS0_VFLIP BIT(31) |
|---|
| 874 | +#define SCALER5_POS0_HFLIP BIT(15) |
|---|
| 875 | + |
|---|
| 876 | +#define SCALER5_CTL2_ALPHA_MODE_MASK VC4_MASK(31, 30) |
|---|
| 877 | +#define SCALER5_CTL2_ALPHA_MODE_SHIFT 30 |
|---|
| 878 | +#define SCALER5_CTL2_ALPHA_MODE_PIPELINE 0 |
|---|
| 879 | +#define SCALER5_CTL2_ALPHA_MODE_FIXED 1 |
|---|
| 880 | +#define SCALER5_CTL2_ALPHA_MODE_FIXED_NONZERO 2 |
|---|
| 881 | +#define SCALER5_CTL2_ALPHA_MODE_FIXED_OVER_0x07 3 |
|---|
| 882 | + |
|---|
| 883 | +#define SCALER5_CTL2_ALPHA_PREMULT BIT(29) |
|---|
| 884 | + |
|---|
| 885 | +#define SCALER5_CTL2_ALPHA_MIX BIT(28) |
|---|
| 886 | + |
|---|
| 887 | +#define SCALER5_CTL2_ALPHA_LOC BIT(25) |
|---|
| 888 | + |
|---|
| 889 | +#define SCALER5_CTL2_MAP_SEL_MASK VC4_MASK(18, 17) |
|---|
| 890 | +#define SCALER5_CTL2_MAP_SEL_SHIFT 17 |
|---|
| 891 | + |
|---|
| 892 | +#define SCALER5_CTL2_GAMMA BIT(16) |
|---|
| 893 | + |
|---|
| 894 | +#define SCALER5_CTL2_ALPHA_MASK VC4_MASK(15, 4) |
|---|
| 895 | +#define SCALER5_CTL2_ALPHA_SHIFT 4 |
|---|
| 896 | + |
|---|
| 935 | 897 | #define SCALER_POS1_SCL_HEIGHT_MASK VC4_MASK(27, 16) |
|---|
| 936 | 898 | #define SCALER_POS1_SCL_HEIGHT_SHIFT 16 |
|---|
| 937 | 899 | |
|---|
| 938 | 900 | #define SCALER_POS1_SCL_WIDTH_MASK VC4_MASK(11, 0) |
|---|
| 939 | 901 | #define SCALER_POS1_SCL_WIDTH_SHIFT 0 |
|---|
| 902 | + |
|---|
| 903 | +#define SCALER5_POS1_SCL_HEIGHT_MASK VC4_MASK(28, 16) |
|---|
| 904 | +#define SCALER5_POS1_SCL_HEIGHT_SHIFT 16 |
|---|
| 905 | + |
|---|
| 906 | +#define SCALER5_POS1_SCL_WIDTH_MASK VC4_MASK(12, 0) |
|---|
| 907 | +#define SCALER5_POS1_SCL_WIDTH_SHIFT 0 |
|---|
| 940 | 908 | |
|---|
| 941 | 909 | #define SCALER_POS2_ALPHA_MODE_MASK VC4_MASK(31, 30) |
|---|
| 942 | 910 | #define SCALER_POS2_ALPHA_MODE_SHIFT 30 |
|---|
| .. | .. |
|---|
| 952 | 920 | |
|---|
| 953 | 921 | #define SCALER_POS2_WIDTH_MASK VC4_MASK(11, 0) |
|---|
| 954 | 922 | #define SCALER_POS2_WIDTH_SHIFT 0 |
|---|
| 923 | + |
|---|
| 924 | +#define SCALER5_POS2_HEIGHT_MASK VC4_MASK(28, 16) |
|---|
| 925 | +#define SCALER5_POS2_HEIGHT_SHIFT 16 |
|---|
| 926 | + |
|---|
| 927 | +#define SCALER5_POS2_WIDTH_MASK VC4_MASK(12, 0) |
|---|
| 928 | +#define SCALER5_POS2_WIDTH_SHIFT 0 |
|---|
| 955 | 929 | |
|---|
| 956 | 930 | /* Color Space Conversion words. Some values are S2.8 signed |
|---|
| 957 | 931 | * integers, except that the 2 integer bits map as {0x0: 0, 0x1: 1, |
|---|
| .. | .. |
|---|
| 1037 | 1011 | #define SCALER_TILE_HEIGHT_MASK VC4_MASK(15, 0) |
|---|
| 1038 | 1012 | #define SCALER_TILE_HEIGHT_SHIFT 0 |
|---|
| 1039 | 1013 | |
|---|
| 1014 | +/* Common PITCH0 fields */ |
|---|
| 1015 | +#define SCALER_PITCH0_SINK_PIX_MASK VC4_MASK(31, 26) |
|---|
| 1016 | +#define SCALER_PITCH0_SINK_PIX_SHIFT 26 |
|---|
| 1017 | + |
|---|
| 1040 | 1018 | /* PITCH0 fields for T-tiled. */ |
|---|
| 1041 | 1019 | #define SCALER_PITCH0_TILE_WIDTH_L_MASK VC4_MASK(22, 16) |
|---|
| 1042 | 1020 | #define SCALER_PITCH0_TILE_WIDTH_L_SHIFT 16 |
|---|
| 1043 | 1021 | #define SCALER_PITCH0_TILE_LINE_DIR BIT(15) |
|---|
| 1044 | 1022 | #define SCALER_PITCH0_TILE_INITIAL_LINE_DIR BIT(14) |
|---|
| 1045 | 1023 | /* 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 |
|---|
| 1024 | +#define SCALER_PITCH0_TILE_Y_OFFSET_MASK VC4_MASK(13, 8) |
|---|
| 1025 | +#define SCALER_PITCH0_TILE_Y_OFFSET_SHIFT 8 |
|---|
| 1048 | 1026 | #define SCALER_PITCH0_TILE_WIDTH_R_MASK VC4_MASK(6, 0) |
|---|
| 1049 | 1027 | #define SCALER_PITCH0_TILE_WIDTH_R_SHIFT 0 |
|---|
| 1050 | 1028 | |
|---|