| .. | .. |
|---|
| 79 | 79 | |
|---|
| 80 | 80 | /* DPRC command versioning */ |
|---|
| 81 | 81 | #define DPRC_CMD_BASE_VERSION 1 |
|---|
| 82 | +#define DPRC_CMD_2ND_VERSION 2 |
|---|
| 83 | +#define DPRC_CMD_3RD_VERSION 3 |
|---|
| 82 | 84 | #define DPRC_CMD_ID_OFFSET 4 |
|---|
| 83 | 85 | |
|---|
| 84 | 86 | #define DPRC_CMD(id) (((id) << DPRC_CMD_ID_OFFSET) | DPRC_CMD_BASE_VERSION) |
|---|
| 87 | +#define DPRC_CMD_V2(id) (((id) << DPRC_CMD_ID_OFFSET) | DPRC_CMD_2ND_VERSION) |
|---|
| 88 | +#define DPRC_CMD_V3(id) (((id) << DPRC_CMD_ID_OFFSET) | DPRC_CMD_3RD_VERSION) |
|---|
| 85 | 89 | |
|---|
| 86 | 90 | /* DPRC command IDs */ |
|---|
| 87 | 91 | #define DPRC_CMDID_CLOSE DPRC_CMD(0x800) |
|---|
| .. | .. |
|---|
| 89 | 93 | #define DPRC_CMDID_GET_API_VERSION DPRC_CMD(0xa05) |
|---|
| 90 | 94 | |
|---|
| 91 | 95 | #define DPRC_CMDID_GET_ATTR DPRC_CMD(0x004) |
|---|
| 96 | +#define DPRC_CMDID_RESET_CONT DPRC_CMD(0x005) |
|---|
| 97 | +#define DPRC_CMDID_RESET_CONT_V2 DPRC_CMD_V2(0x005) |
|---|
| 92 | 98 | |
|---|
| 93 | 99 | #define DPRC_CMDID_SET_IRQ DPRC_CMD(0x010) |
|---|
| 94 | 100 | #define DPRC_CMDID_SET_IRQ_ENABLE DPRC_CMD(0x012) |
|---|
| .. | .. |
|---|
| 100 | 106 | #define DPRC_CMDID_GET_OBJ_COUNT DPRC_CMD(0x159) |
|---|
| 101 | 107 | #define DPRC_CMDID_GET_OBJ DPRC_CMD(0x15A) |
|---|
| 102 | 108 | #define DPRC_CMDID_GET_OBJ_REG DPRC_CMD(0x15E) |
|---|
| 109 | +#define DPRC_CMDID_GET_OBJ_REG_V2 DPRC_CMD_V2(0x15E) |
|---|
| 110 | +#define DPRC_CMDID_GET_OBJ_REG_V3 DPRC_CMD_V3(0x15E) |
|---|
| 103 | 111 | #define DPRC_CMDID_SET_OBJ_IRQ DPRC_CMD(0x15F) |
|---|
| 112 | + |
|---|
| 113 | +#define DPRC_CMDID_GET_CONNECTION DPRC_CMD(0x16C) |
|---|
| 104 | 114 | |
|---|
| 105 | 115 | struct dprc_cmd_open { |
|---|
| 106 | 116 | __le32 container_id; |
|---|
| 117 | +}; |
|---|
| 118 | + |
|---|
| 119 | +struct dprc_cmd_reset_container { |
|---|
| 120 | + __le32 child_container_id; |
|---|
| 121 | + __le32 options; |
|---|
| 107 | 122 | }; |
|---|
| 108 | 123 | |
|---|
| 109 | 124 | struct dprc_cmd_set_irq { |
|---|
| .. | .. |
|---|
| 147 | 162 | struct dprc_rsp_get_attributes { |
|---|
| 148 | 163 | /* response word 0 */ |
|---|
| 149 | 164 | __le32 container_id; |
|---|
| 150 | | - __le16 icid; |
|---|
| 151 | | - __le16 pad; |
|---|
| 165 | + __le32 icid; |
|---|
| 152 | 166 | /* response word 1 */ |
|---|
| 153 | 167 | __le32 options; |
|---|
| 154 | 168 | __le32 portal_id; |
|---|
| .. | .. |
|---|
| 199 | 213 | /* response word 0 */ |
|---|
| 200 | 214 | __le64 pad; |
|---|
| 201 | 215 | /* response word 1 */ |
|---|
| 202 | | - __le64 base_addr; |
|---|
| 216 | + __le64 base_offset; |
|---|
| 203 | 217 | /* response word 2 */ |
|---|
| 204 | 218 | __le32 size; |
|---|
| 219 | + __le32 pad2; |
|---|
| 220 | + /* response word 3 */ |
|---|
| 221 | + __le32 flags; |
|---|
| 222 | + __le32 pad3; |
|---|
| 223 | + /* response word 4 */ |
|---|
| 224 | + /* base_addr may be zero if older MC firmware is used */ |
|---|
| 225 | + __le64 base_addr; |
|---|
| 205 | 226 | }; |
|---|
| 206 | 227 | |
|---|
| 207 | 228 | struct dprc_cmd_set_obj_irq { |
|---|
| .. | .. |
|---|
| 216 | 237 | __le32 obj_id; |
|---|
| 217 | 238 | /* cmd word 3-4 */ |
|---|
| 218 | 239 | u8 obj_type[16]; |
|---|
| 240 | +}; |
|---|
| 241 | + |
|---|
| 242 | +struct dprc_cmd_get_connection { |
|---|
| 243 | + __le32 ep1_id; |
|---|
| 244 | + __le16 ep1_interface_id; |
|---|
| 245 | + u8 pad[2]; |
|---|
| 246 | + u8 ep1_type[16]; |
|---|
| 247 | +}; |
|---|
| 248 | + |
|---|
| 249 | +struct dprc_rsp_get_connection { |
|---|
| 250 | + __le64 pad[3]; |
|---|
| 251 | + __le32 ep2_id; |
|---|
| 252 | + __le16 ep2_interface_id; |
|---|
| 253 | + __le16 pad1; |
|---|
| 254 | + u8 ep2_type[16]; |
|---|
| 255 | + __le32 state; |
|---|
| 219 | 256 | }; |
|---|
| 220 | 257 | |
|---|
| 221 | 258 | /* |
|---|
| .. | .. |
|---|
| 302 | 339 | */ |
|---|
| 303 | 340 | struct dprc_attributes { |
|---|
| 304 | 341 | int container_id; |
|---|
| 305 | | - u16 icid; |
|---|
| 342 | + u32 icid; |
|---|
| 306 | 343 | int portal_id; |
|---|
| 307 | 344 | u64 options; |
|---|
| 308 | 345 | }; |
|---|
| .. | .. |
|---|
| 330 | 367 | int obj_id, |
|---|
| 331 | 368 | u8 irq_index, |
|---|
| 332 | 369 | struct dprc_irq_cfg *irq_cfg); |
|---|
| 333 | | - |
|---|
| 334 | | -/* Region flags */ |
|---|
| 335 | | -/* Cacheable - Indicates that region should be mapped as cacheable */ |
|---|
| 336 | | -#define DPRC_REGION_CACHEABLE 0x00000001 |
|---|
| 337 | | - |
|---|
| 338 | 370 | /** |
|---|
| 339 | 371 | * enum dprc_region_type - Region type |
|---|
| 340 | 372 | * @DPRC_REGION_TYPE_MC_PORTAL: MC portal region |
|---|
| .. | .. |
|---|
| 342 | 374 | */ |
|---|
| 343 | 375 | enum dprc_region_type { |
|---|
| 344 | 376 | DPRC_REGION_TYPE_MC_PORTAL, |
|---|
| 345 | | - DPRC_REGION_TYPE_QBMAN_PORTAL |
|---|
| 377 | + DPRC_REGION_TYPE_QBMAN_PORTAL, |
|---|
| 378 | + DPRC_REGION_TYPE_QBMAN_MEM_BACKED_PORTAL |
|---|
| 346 | 379 | }; |
|---|
| 347 | 380 | |
|---|
| 348 | 381 | /** |
|---|
| .. | .. |
|---|
| 360 | 393 | u32 size; |
|---|
| 361 | 394 | u32 flags; |
|---|
| 362 | 395 | enum dprc_region_type type; |
|---|
| 396 | + u64 base_address; |
|---|
| 363 | 397 | }; |
|---|
| 364 | 398 | |
|---|
| 365 | 399 | int dprc_get_obj_region(struct fsl_mc_io *mc_io, |
|---|
| .. | .. |
|---|
| 378 | 412 | int dprc_get_container_id(struct fsl_mc_io *mc_io, |
|---|
| 379 | 413 | u32 cmd_flags, |
|---|
| 380 | 414 | int *container_id); |
|---|
| 415 | + |
|---|
| 416 | +/** |
|---|
| 417 | + * struct dprc_endpoint - Endpoint description for link connect/disconnect |
|---|
| 418 | + * operations |
|---|
| 419 | + * @type: Endpoint object type: NULL terminated string |
|---|
| 420 | + * @id: Endpoint object ID |
|---|
| 421 | + * @if_id: Interface ID; should be set for endpoints with multiple |
|---|
| 422 | + * interfaces ("dpsw", "dpdmux"); for others, always set to 0 |
|---|
| 423 | + */ |
|---|
| 424 | +struct dprc_endpoint { |
|---|
| 425 | + char type[16]; |
|---|
| 426 | + int id; |
|---|
| 427 | + u16 if_id; |
|---|
| 428 | +}; |
|---|
| 429 | + |
|---|
| 430 | +int dprc_get_connection(struct fsl_mc_io *mc_io, |
|---|
| 431 | + u32 cmd_flags, |
|---|
| 432 | + u16 token, |
|---|
| 433 | + const struct dprc_endpoint *endpoint1, |
|---|
| 434 | + struct dprc_endpoint *endpoint2, |
|---|
| 435 | + int *state); |
|---|
| 381 | 436 | |
|---|
| 382 | 437 | /* |
|---|
| 383 | 438 | * Data Path Buffer Pool (DPBP) API |
|---|
| .. | .. |
|---|
| 466 | 521 | __le64 user_ctx; |
|---|
| 467 | 522 | }; |
|---|
| 468 | 523 | |
|---|
| 469 | | -/** |
|---|
| 470 | | - * Maximum number of total IRQs that can be pre-allocated for an MC bus' |
|---|
| 471 | | - * IRQ pool |
|---|
| 472 | | - */ |
|---|
| 473 | | -#define FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS 256 |
|---|
| 474 | 524 | |
|---|
| 475 | 525 | /** |
|---|
| 476 | 526 | * struct fsl_mc_resource_pool - Pool of MC resources of a given |
|---|
| .. | .. |
|---|
| 543 | 593 | |
|---|
| 544 | 594 | void fsl_mc_msi_domain_free_irqs(struct device *dev); |
|---|
| 545 | 595 | |
|---|
| 546 | | -int fsl_mc_find_msi_domain(struct device *mc_platform_dev, |
|---|
| 547 | | - struct irq_domain **mc_msi_domain); |
|---|
| 548 | | - |
|---|
| 549 | | -int fsl_mc_populate_irq_pool(struct fsl_mc_bus *mc_bus, |
|---|
| 550 | | - unsigned int irq_count); |
|---|
| 551 | | - |
|---|
| 552 | | -void fsl_mc_cleanup_irq_pool(struct fsl_mc_bus *mc_bus); |
|---|
| 596 | +struct irq_domain *fsl_mc_find_msi_domain(struct device *dev); |
|---|
| 553 | 597 | |
|---|
| 554 | 598 | int __must_check fsl_create_mc_io(struct device *dev, |
|---|
| 555 | 599 | phys_addr_t mc_portal_phys_addr, |
|---|
| .. | .. |
|---|
| 561 | 605 | |
|---|
| 562 | 606 | bool fsl_mc_is_root_dprc(struct device *dev); |
|---|
| 563 | 607 | |
|---|
| 608 | +void fsl_mc_get_root_dprc(struct device *dev, |
|---|
| 609 | + struct device **root_dprc_dev); |
|---|
| 610 | + |
|---|
| 611 | +struct fsl_mc_device *fsl_mc_device_lookup(struct fsl_mc_obj_desc *obj_desc, |
|---|
| 612 | + struct fsl_mc_device *mc_bus_dev); |
|---|
| 613 | + |
|---|
| 564 | 614 | #endif /* _FSL_MC_PRIVATE_H_ */ |
|---|