Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

amdgpu/dc: separate out some common code from bios parsers.

This extracts the bios parser object id handling into a common file.

Signed-off-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Dave Airlie and committed by
Alex Deucher
e25cb588 e5bcf3d8

+324 -557
+1 -1
drivers/gpu/drm/amd/display/dc/bios/Makefile
··· 2 2 # Makefile for the 'bios' sub-component of DAL. 3 3 # It provides the parsing and executing controls for atom bios image. 4 4 5 - BIOS = bios_parser.o bios_parser_interface.o bios_parser_helper.o command_table.o command_table_helper.o 5 + BIOS = bios_parser.o bios_parser_interface.o bios_parser_helper.o command_table.o command_table_helper.o bios_parser_common.o 6 6 7 7 BIOS += command_table2.o command_table_helper2.o bios_parser2.o 8 8
+1 -273
drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
··· 41 41 #include "bios_parser_types_internal.h" 42 42 #include "bios_parser_interface.h" 43 43 44 + #include "bios_parser_common.h" 44 45 /* TODO remove - only needed for default i2c speed */ 45 46 #include "dc.h" 46 47 ··· 58 57 59 58 #define DATA_TABLES(table) (bp->master_data_tbl->ListOfDataTables.table) 60 59 61 - static enum object_type object_type_from_bios_object_id( 62 - uint32_t bios_object_id); 63 - static struct graphics_object_id object_id_from_bios_object_id( 64 - uint32_t bios_object_id); 65 - static enum object_enum_id enum_id_from_bios_object_id(uint32_t bios_object_id); 66 - static enum encoder_id encoder_id_from_bios_object_id(uint32_t bios_object_id); 67 - static enum connector_id connector_id_from_bios_object_id( 68 - uint32_t bios_object_id); 69 - static uint32_t id_from_bios_object_id(enum object_type type, 70 - uint32_t bios_object_id); 71 - static uint32_t gpu_id_from_bios_object_id(uint32_t bios_object_id); 72 - static enum generic_id generic_id_from_bios_object_id(uint32_t bios_object_id); 73 60 static void get_atom_data_table_revision( 74 61 ATOM_COMMON_TABLE_HEADER *atom_data_tbl, 75 62 struct atom_data_revision *tbl_revision); ··· 2390 2401 return 0; 2391 2402 2392 2403 return *number; 2393 - } 2394 - 2395 - 2396 - static struct graphics_object_id object_id_from_bios_object_id( 2397 - uint32_t bios_object_id) 2398 - { 2399 - enum object_type type; 2400 - enum object_enum_id enum_id; 2401 - struct graphics_object_id go_id = { 0 }; 2402 - 2403 - type = object_type_from_bios_object_id(bios_object_id); 2404 - 2405 - if (OBJECT_TYPE_UNKNOWN == type) 2406 - return go_id; 2407 - 2408 - enum_id = enum_id_from_bios_object_id(bios_object_id); 2409 - 2410 - if (ENUM_ID_UNKNOWN == enum_id) 2411 - return go_id; 2412 - 2413 - go_id = dal_graphics_object_id_init( 2414 - id_from_bios_object_id(type, bios_object_id), enum_id, type); 2415 - 2416 - return go_id; 2417 - } 2418 - 2419 - static enum object_type object_type_from_bios_object_id(uint32_t bios_object_id) 2420 - { 2421 - uint32_t bios_object_type = (bios_object_id & OBJECT_TYPE_MASK) 2422 - >> OBJECT_TYPE_SHIFT; 2423 - enum object_type object_type; 2424 - 2425 - switch (bios_object_type) { 2426 - case GRAPH_OBJECT_TYPE_GPU: 2427 - object_type = OBJECT_TYPE_GPU; 2428 - break; 2429 - case GRAPH_OBJECT_TYPE_ENCODER: 2430 - object_type = OBJECT_TYPE_ENCODER; 2431 - break; 2432 - case GRAPH_OBJECT_TYPE_CONNECTOR: 2433 - object_type = OBJECT_TYPE_CONNECTOR; 2434 - break; 2435 - case GRAPH_OBJECT_TYPE_ROUTER: 2436 - object_type = OBJECT_TYPE_ROUTER; 2437 - break; 2438 - case GRAPH_OBJECT_TYPE_GENERIC: 2439 - object_type = OBJECT_TYPE_GENERIC; 2440 - break; 2441 - default: 2442 - object_type = OBJECT_TYPE_UNKNOWN; 2443 - break; 2444 - } 2445 - 2446 - return object_type; 2447 - } 2448 - 2449 - static enum object_enum_id enum_id_from_bios_object_id(uint32_t bios_object_id) 2450 - { 2451 - uint32_t bios_enum_id = 2452 - (bios_object_id & ENUM_ID_MASK) >> ENUM_ID_SHIFT; 2453 - enum object_enum_id id; 2454 - 2455 - switch (bios_enum_id) { 2456 - case GRAPH_OBJECT_ENUM_ID1: 2457 - id = ENUM_ID_1; 2458 - break; 2459 - case GRAPH_OBJECT_ENUM_ID2: 2460 - id = ENUM_ID_2; 2461 - break; 2462 - case GRAPH_OBJECT_ENUM_ID3: 2463 - id = ENUM_ID_3; 2464 - break; 2465 - case GRAPH_OBJECT_ENUM_ID4: 2466 - id = ENUM_ID_4; 2467 - break; 2468 - case GRAPH_OBJECT_ENUM_ID5: 2469 - id = ENUM_ID_5; 2470 - break; 2471 - case GRAPH_OBJECT_ENUM_ID6: 2472 - id = ENUM_ID_6; 2473 - break; 2474 - case GRAPH_OBJECT_ENUM_ID7: 2475 - id = ENUM_ID_7; 2476 - break; 2477 - default: 2478 - id = ENUM_ID_UNKNOWN; 2479 - break; 2480 - } 2481 - 2482 - return id; 2483 - } 2484 - 2485 - static uint32_t id_from_bios_object_id(enum object_type type, 2486 - uint32_t bios_object_id) 2487 - { 2488 - switch (type) { 2489 - case OBJECT_TYPE_GPU: 2490 - return gpu_id_from_bios_object_id(bios_object_id); 2491 - case OBJECT_TYPE_ENCODER: 2492 - return (uint32_t)encoder_id_from_bios_object_id(bios_object_id); 2493 - case OBJECT_TYPE_CONNECTOR: 2494 - return (uint32_t)connector_id_from_bios_object_id( 2495 - bios_object_id); 2496 - case OBJECT_TYPE_GENERIC: 2497 - return generic_id_from_bios_object_id(bios_object_id); 2498 - default: 2499 - return 0; 2500 - } 2501 - } 2502 - 2503 - static enum connector_id connector_id_from_bios_object_id( 2504 - uint32_t bios_object_id) 2505 - { 2506 - uint32_t bios_connector_id = gpu_id_from_bios_object_id(bios_object_id); 2507 - 2508 - enum connector_id id; 2509 - 2510 - switch (bios_connector_id) { 2511 - case CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I: 2512 - id = CONNECTOR_ID_SINGLE_LINK_DVII; 2513 - break; 2514 - case CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I: 2515 - id = CONNECTOR_ID_DUAL_LINK_DVII; 2516 - break; 2517 - case CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D: 2518 - id = CONNECTOR_ID_SINGLE_LINK_DVID; 2519 - break; 2520 - case CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D: 2521 - id = CONNECTOR_ID_DUAL_LINK_DVID; 2522 - break; 2523 - case CONNECTOR_OBJECT_ID_VGA: 2524 - id = CONNECTOR_ID_VGA; 2525 - break; 2526 - case CONNECTOR_OBJECT_ID_HDMI_TYPE_A: 2527 - id = CONNECTOR_ID_HDMI_TYPE_A; 2528 - break; 2529 - case CONNECTOR_OBJECT_ID_LVDS: 2530 - id = CONNECTOR_ID_LVDS; 2531 - break; 2532 - case CONNECTOR_OBJECT_ID_PCIE_CONNECTOR: 2533 - id = CONNECTOR_ID_PCIE; 2534 - break; 2535 - case CONNECTOR_OBJECT_ID_HARDCODE_DVI: 2536 - id = CONNECTOR_ID_HARDCODE_DVI; 2537 - break; 2538 - case CONNECTOR_OBJECT_ID_DISPLAYPORT: 2539 - id = CONNECTOR_ID_DISPLAY_PORT; 2540 - break; 2541 - case CONNECTOR_OBJECT_ID_eDP: 2542 - id = CONNECTOR_ID_EDP; 2543 - break; 2544 - case CONNECTOR_OBJECT_ID_MXM: 2545 - id = CONNECTOR_ID_MXM; 2546 - break; 2547 - default: 2548 - id = CONNECTOR_ID_UNKNOWN; 2549 - break; 2550 - } 2551 - 2552 - return id; 2553 - } 2554 - 2555 - static enum encoder_id encoder_id_from_bios_object_id(uint32_t bios_object_id) 2556 - { 2557 - uint32_t bios_encoder_id = gpu_id_from_bios_object_id(bios_object_id); 2558 - enum encoder_id id; 2559 - 2560 - switch (bios_encoder_id) { 2561 - case ENCODER_OBJECT_ID_INTERNAL_LVDS: 2562 - id = ENCODER_ID_INTERNAL_LVDS; 2563 - break; 2564 - case ENCODER_OBJECT_ID_INTERNAL_TMDS1: 2565 - id = ENCODER_ID_INTERNAL_TMDS1; 2566 - break; 2567 - case ENCODER_OBJECT_ID_INTERNAL_TMDS2: 2568 - id = ENCODER_ID_INTERNAL_TMDS2; 2569 - break; 2570 - case ENCODER_OBJECT_ID_INTERNAL_DAC1: 2571 - id = ENCODER_ID_INTERNAL_DAC1; 2572 - break; 2573 - case ENCODER_OBJECT_ID_INTERNAL_DAC2: 2574 - id = ENCODER_ID_INTERNAL_DAC2; 2575 - break; 2576 - case ENCODER_OBJECT_ID_INTERNAL_LVTM1: 2577 - id = ENCODER_ID_INTERNAL_LVTM1; 2578 - break; 2579 - case ENCODER_OBJECT_ID_HDMI_INTERNAL: 2580 - id = ENCODER_ID_INTERNAL_HDMI; 2581 - break; 2582 - case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: 2583 - id = ENCODER_ID_INTERNAL_KLDSCP_TMDS1; 2584 - break; 2585 - case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1: 2586 - id = ENCODER_ID_INTERNAL_KLDSCP_DAC1; 2587 - break; 2588 - case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2: 2589 - id = ENCODER_ID_INTERNAL_KLDSCP_DAC2; 2590 - break; 2591 - case ENCODER_OBJECT_ID_MVPU_FPGA: 2592 - id = ENCODER_ID_EXTERNAL_MVPU_FPGA; 2593 - break; 2594 - case ENCODER_OBJECT_ID_INTERNAL_DDI: 2595 - id = ENCODER_ID_INTERNAL_DDI; 2596 - break; 2597 - case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: 2598 - id = ENCODER_ID_INTERNAL_UNIPHY; 2599 - break; 2600 - case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: 2601 - id = ENCODER_ID_INTERNAL_KLDSCP_LVTMA; 2602 - break; 2603 - case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: 2604 - id = ENCODER_ID_INTERNAL_UNIPHY1; 2605 - break; 2606 - case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: 2607 - id = ENCODER_ID_INTERNAL_UNIPHY2; 2608 - break; 2609 - case ENCODER_OBJECT_ID_ALMOND: /* ENCODER_OBJECT_ID_NUTMEG */ 2610 - id = ENCODER_ID_EXTERNAL_NUTMEG; 2611 - break; 2612 - case ENCODER_OBJECT_ID_TRAVIS: 2613 - id = ENCODER_ID_EXTERNAL_TRAVIS; 2614 - break; 2615 - case ENCODER_OBJECT_ID_INTERNAL_UNIPHY3: 2616 - id = ENCODER_ID_INTERNAL_UNIPHY3; 2617 - break; 2618 - default: 2619 - id = ENCODER_ID_UNKNOWN; 2620 - ASSERT(0); 2621 - break; 2622 - } 2623 - 2624 - return id; 2625 - } 2626 - 2627 - uint32_t gpu_id_from_bios_object_id(uint32_t bios_object_id) 2628 - { 2629 - return (bios_object_id & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT; 2630 - } 2631 - 2632 - enum generic_id generic_id_from_bios_object_id(uint32_t bios_object_id) 2633 - { 2634 - uint32_t bios_generic_id = gpu_id_from_bios_object_id(bios_object_id); 2635 - 2636 - enum generic_id id; 2637 - 2638 - switch (bios_generic_id) { 2639 - case GENERIC_OBJECT_ID_MXM_OPM: 2640 - id = GENERIC_ID_MXM_OPM; 2641 - break; 2642 - case GENERIC_OBJECT_ID_GLSYNC: 2643 - id = GENERIC_ID_GLSYNC; 2644 - break; 2645 - case GENERIC_OBJECT_ID_STEREO_PIN: 2646 - id = GENERIC_ID_STEREO; 2647 - break; 2648 - default: 2649 - id = GENERIC_ID_UNKNOWN; 2650 - break; 2651 - } 2652 - 2653 - return id; 2654 2404 } 2655 2405 2656 2406 static struct device_id device_type_from_device_id(uint16_t device_id)
+1 -283
drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
··· 25 25 26 26 #include "dm_services.h" 27 27 28 - #define _BIOS_PARSER_2_ 29 - 30 28 #include "ObjectID.h" 31 29 #include "atomfirmware.h" 32 30 ··· 42 44 #include "bios_parser_types_internal2.h" 43 45 #include "bios_parser_interface.h" 44 46 47 + #include "bios_parser_common.h" 45 48 #define LAST_RECORD_TYPE 0xff 46 49 47 50 ··· 52 53 uint8_t bfHW_Capable:1; 53 54 uint8_t ucAccess; 54 55 }; 55 - 56 - static enum object_type object_type_from_bios_object_id( 57 - uint32_t bios_object_id); 58 - 59 - static enum object_enum_id enum_id_from_bios_object_id(uint32_t bios_object_id); 60 - 61 - static struct graphics_object_id object_id_from_bios_object_id( 62 - uint32_t bios_object_id); 63 - 64 - static uint32_t id_from_bios_object_id(enum object_type type, 65 - uint32_t bios_object_id); 66 - 67 - static uint32_t gpu_id_from_bios_object_id(uint32_t bios_object_id); 68 - 69 - static enum encoder_id encoder_id_from_bios_object_id(uint32_t bios_object_id); 70 - 71 - static enum connector_id connector_id_from_bios_object_id( 72 - uint32_t bios_object_id); 73 - 74 - static enum generic_id generic_id_from_bios_object_id(uint32_t bios_object_id); 75 56 76 57 static enum bp_result get_gpio_i2c_info(struct bios_parser *bp, 77 58 struct atom_i2c_record *record, ··· 125 146 (uint32_t) atom_data_tbl->format_revision & 0x3f; 126 147 tbl_revision->minor = 127 148 (uint32_t) atom_data_tbl->content_revision & 0x3f; 128 - } 129 - 130 - static struct graphics_object_id object_id_from_bios_object_id( 131 - uint32_t bios_object_id) 132 - { 133 - enum object_type type; 134 - enum object_enum_id enum_id; 135 - struct graphics_object_id go_id = { 0 }; 136 - 137 - type = object_type_from_bios_object_id(bios_object_id); 138 - 139 - if (type == OBJECT_TYPE_UNKNOWN) 140 - return go_id; 141 - 142 - enum_id = enum_id_from_bios_object_id(bios_object_id); 143 - 144 - if (enum_id == ENUM_ID_UNKNOWN) 145 - return go_id; 146 - 147 - go_id = dal_graphics_object_id_init( 148 - id_from_bios_object_id(type, bios_object_id), 149 - enum_id, type); 150 - 151 - return go_id; 152 - } 153 - 154 - static enum object_type object_type_from_bios_object_id(uint32_t bios_object_id) 155 - { 156 - uint32_t bios_object_type = (bios_object_id & OBJECT_TYPE_MASK) 157 - >> OBJECT_TYPE_SHIFT; 158 - enum object_type object_type; 159 - 160 - switch (bios_object_type) { 161 - case GRAPH_OBJECT_TYPE_GPU: 162 - object_type = OBJECT_TYPE_GPU; 163 - break; 164 - case GRAPH_OBJECT_TYPE_ENCODER: 165 - object_type = OBJECT_TYPE_ENCODER; 166 - break; 167 - case GRAPH_OBJECT_TYPE_CONNECTOR: 168 - object_type = OBJECT_TYPE_CONNECTOR; 169 - break; 170 - case GRAPH_OBJECT_TYPE_ROUTER: 171 - object_type = OBJECT_TYPE_ROUTER; 172 - break; 173 - case GRAPH_OBJECT_TYPE_GENERIC: 174 - object_type = OBJECT_TYPE_GENERIC; 175 - break; 176 - default: 177 - object_type = OBJECT_TYPE_UNKNOWN; 178 - break; 179 - } 180 - 181 - return object_type; 182 - } 183 - 184 - static enum object_enum_id enum_id_from_bios_object_id(uint32_t bios_object_id) 185 - { 186 - uint32_t bios_enum_id = 187 - (bios_object_id & ENUM_ID_MASK) >> ENUM_ID_SHIFT; 188 - enum object_enum_id id; 189 - 190 - switch (bios_enum_id) { 191 - case GRAPH_OBJECT_ENUM_ID1: 192 - id = ENUM_ID_1; 193 - break; 194 - case GRAPH_OBJECT_ENUM_ID2: 195 - id = ENUM_ID_2; 196 - break; 197 - case GRAPH_OBJECT_ENUM_ID3: 198 - id = ENUM_ID_3; 199 - break; 200 - case GRAPH_OBJECT_ENUM_ID4: 201 - id = ENUM_ID_4; 202 - break; 203 - case GRAPH_OBJECT_ENUM_ID5: 204 - id = ENUM_ID_5; 205 - break; 206 - case GRAPH_OBJECT_ENUM_ID6: 207 - id = ENUM_ID_6; 208 - break; 209 - case GRAPH_OBJECT_ENUM_ID7: 210 - id = ENUM_ID_7; 211 - break; 212 - default: 213 - id = ENUM_ID_UNKNOWN; 214 - break; 215 - } 216 - 217 - return id; 218 - } 219 - 220 - static uint32_t id_from_bios_object_id(enum object_type type, 221 - uint32_t bios_object_id) 222 - { 223 - switch (type) { 224 - case OBJECT_TYPE_GPU: 225 - return gpu_id_from_bios_object_id(bios_object_id); 226 - case OBJECT_TYPE_ENCODER: 227 - return (uint32_t)encoder_id_from_bios_object_id(bios_object_id); 228 - case OBJECT_TYPE_CONNECTOR: 229 - return (uint32_t)connector_id_from_bios_object_id( 230 - bios_object_id); 231 - case OBJECT_TYPE_GENERIC: 232 - return generic_id_from_bios_object_id(bios_object_id); 233 - default: 234 - return 0; 235 - } 236 - } 237 - 238 - uint32_t gpu_id_from_bios_object_id(uint32_t bios_object_id) 239 - { 240 - return (bios_object_id & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT; 241 - } 242 - 243 - static enum encoder_id encoder_id_from_bios_object_id(uint32_t bios_object_id) 244 - { 245 - uint32_t bios_encoder_id = gpu_id_from_bios_object_id(bios_object_id); 246 - enum encoder_id id; 247 - 248 - switch (bios_encoder_id) { 249 - case ENCODER_OBJECT_ID_INTERNAL_LVDS: 250 - id = ENCODER_ID_INTERNAL_LVDS; 251 - break; 252 - case ENCODER_OBJECT_ID_INTERNAL_TMDS1: 253 - id = ENCODER_ID_INTERNAL_TMDS1; 254 - break; 255 - case ENCODER_OBJECT_ID_INTERNAL_TMDS2: 256 - id = ENCODER_ID_INTERNAL_TMDS2; 257 - break; 258 - case ENCODER_OBJECT_ID_INTERNAL_DAC1: 259 - id = ENCODER_ID_INTERNAL_DAC1; 260 - break; 261 - case ENCODER_OBJECT_ID_INTERNAL_DAC2: 262 - id = ENCODER_ID_INTERNAL_DAC2; 263 - break; 264 - case ENCODER_OBJECT_ID_INTERNAL_LVTM1: 265 - id = ENCODER_ID_INTERNAL_LVTM1; 266 - break; 267 - case ENCODER_OBJECT_ID_HDMI_INTERNAL: 268 - id = ENCODER_ID_INTERNAL_HDMI; 269 - break; 270 - case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: 271 - id = ENCODER_ID_INTERNAL_KLDSCP_TMDS1; 272 - break; 273 - case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1: 274 - id = ENCODER_ID_INTERNAL_KLDSCP_DAC1; 275 - break; 276 - case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2: 277 - id = ENCODER_ID_INTERNAL_KLDSCP_DAC2; 278 - break; 279 - case ENCODER_OBJECT_ID_MVPU_FPGA: 280 - id = ENCODER_ID_EXTERNAL_MVPU_FPGA; 281 - break; 282 - case ENCODER_OBJECT_ID_INTERNAL_DDI: 283 - id = ENCODER_ID_INTERNAL_DDI; 284 - break; 285 - case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: 286 - id = ENCODER_ID_INTERNAL_UNIPHY; 287 - break; 288 - case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: 289 - id = ENCODER_ID_INTERNAL_KLDSCP_LVTMA; 290 - break; 291 - case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: 292 - id = ENCODER_ID_INTERNAL_UNIPHY1; 293 - break; 294 - case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: 295 - id = ENCODER_ID_INTERNAL_UNIPHY2; 296 - break; 297 - case ENCODER_OBJECT_ID_ALMOND: /* ENCODER_OBJECT_ID_NUTMEG */ 298 - id = ENCODER_ID_EXTERNAL_NUTMEG; 299 - break; 300 - case ENCODER_OBJECT_ID_TRAVIS: 301 - id = ENCODER_ID_EXTERNAL_TRAVIS; 302 - break; 303 - case ENCODER_OBJECT_ID_INTERNAL_UNIPHY3: 304 - id = ENCODER_ID_INTERNAL_UNIPHY3; 305 - break; 306 - default: 307 - id = ENCODER_ID_UNKNOWN; 308 - ASSERT(0); 309 - break; 310 - } 311 - 312 - return id; 313 - } 314 - 315 - static enum connector_id connector_id_from_bios_object_id( 316 - uint32_t bios_object_id) 317 - { 318 - uint32_t bios_connector_id = gpu_id_from_bios_object_id(bios_object_id); 319 - 320 - enum connector_id id; 321 - 322 - switch (bios_connector_id) { 323 - case CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I: 324 - id = CONNECTOR_ID_SINGLE_LINK_DVII; 325 - break; 326 - case CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I: 327 - id = CONNECTOR_ID_DUAL_LINK_DVII; 328 - break; 329 - case CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D: 330 - id = CONNECTOR_ID_SINGLE_LINK_DVID; 331 - break; 332 - case CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D: 333 - id = CONNECTOR_ID_DUAL_LINK_DVID; 334 - break; 335 - case CONNECTOR_OBJECT_ID_VGA: 336 - id = CONNECTOR_ID_VGA; 337 - break; 338 - case CONNECTOR_OBJECT_ID_HDMI_TYPE_A: 339 - id = CONNECTOR_ID_HDMI_TYPE_A; 340 - break; 341 - case CONNECTOR_OBJECT_ID_LVDS: 342 - id = CONNECTOR_ID_LVDS; 343 - break; 344 - case CONNECTOR_OBJECT_ID_PCIE_CONNECTOR: 345 - id = CONNECTOR_ID_PCIE; 346 - break; 347 - case CONNECTOR_OBJECT_ID_HARDCODE_DVI: 348 - id = CONNECTOR_ID_HARDCODE_DVI; 349 - break; 350 - case CONNECTOR_OBJECT_ID_DISPLAYPORT: 351 - id = CONNECTOR_ID_DISPLAY_PORT; 352 - break; 353 - case CONNECTOR_OBJECT_ID_eDP: 354 - id = CONNECTOR_ID_EDP; 355 - break; 356 - case CONNECTOR_OBJECT_ID_MXM: 357 - id = CONNECTOR_ID_MXM; 358 - break; 359 - default: 360 - id = CONNECTOR_ID_UNKNOWN; 361 - break; 362 - } 363 - 364 - return id; 365 - } 366 - 367 - enum generic_id generic_id_from_bios_object_id(uint32_t bios_object_id) 368 - { 369 - uint32_t bios_generic_id = gpu_id_from_bios_object_id(bios_object_id); 370 - 371 - enum generic_id id; 372 - 373 - switch (bios_generic_id) { 374 - case GENERIC_OBJECT_ID_MXM_OPM: 375 - id = GENERIC_ID_MXM_OPM; 376 - break; 377 - case GENERIC_OBJECT_ID_GLSYNC: 378 - id = GENERIC_ID_GLSYNC; 379 - break; 380 - case GENERIC_OBJECT_ID_STEREO_PIN: 381 - id = GENERIC_ID_STEREO; 382 - break; 383 - default: 384 - id = GENERIC_ID_UNKNOWN; 385 - break; 386 - } 387 - 388 - return id; 389 149 } 390 150 391 151 /* BIOS oject table displaypath is per connector.
+288
drivers/gpu/drm/amd/display/dc/bios/bios_parser_common.c
··· 1 + /* 2 + * Copyright 2012-15 Advanced Micro Devices, Inc. 3 + * 4 + * Permission is hereby granted, free of charge, to any person obtaining a 5 + * copy of this software and associated documentation files (the "Software"), 6 + * to deal in the Software without restriction, including without limitation 7 + * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 + * and/or sell copies of the Software, and to permit persons to whom the 9 + * Software is furnished to do so, subject to the following conditions: 10 + * 11 + * The above copyright notice and this permission notice shall be included in 12 + * all copies or substantial portions of the Software. 13 + * 14 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18 + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19 + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20 + * OTHER DEALINGS IN THE SOFTWARE. 21 + * 22 + * Authors: AMD 23 + * 24 + */ 25 + 26 + #include "bios_parser_common.h" 27 + #include "include/grph_object_ctrl_defs.h" 28 + 29 + static enum object_type object_type_from_bios_object_id(uint32_t bios_object_id) 30 + { 31 + uint32_t bios_object_type = (bios_object_id & OBJECT_TYPE_MASK) 32 + >> OBJECT_TYPE_SHIFT; 33 + enum object_type object_type; 34 + 35 + switch (bios_object_type) { 36 + case GRAPH_OBJECT_TYPE_GPU: 37 + object_type = OBJECT_TYPE_GPU; 38 + break; 39 + case GRAPH_OBJECT_TYPE_ENCODER: 40 + object_type = OBJECT_TYPE_ENCODER; 41 + break; 42 + case GRAPH_OBJECT_TYPE_CONNECTOR: 43 + object_type = OBJECT_TYPE_CONNECTOR; 44 + break; 45 + case GRAPH_OBJECT_TYPE_ROUTER: 46 + object_type = OBJECT_TYPE_ROUTER; 47 + break; 48 + case GRAPH_OBJECT_TYPE_GENERIC: 49 + object_type = OBJECT_TYPE_GENERIC; 50 + break; 51 + default: 52 + object_type = OBJECT_TYPE_UNKNOWN; 53 + break; 54 + } 55 + 56 + return object_type; 57 + } 58 + 59 + static enum object_enum_id enum_id_from_bios_object_id(uint32_t bios_object_id) 60 + { 61 + uint32_t bios_enum_id = 62 + (bios_object_id & ENUM_ID_MASK) >> ENUM_ID_SHIFT; 63 + enum object_enum_id id; 64 + 65 + switch (bios_enum_id) { 66 + case GRAPH_OBJECT_ENUM_ID1: 67 + id = ENUM_ID_1; 68 + break; 69 + case GRAPH_OBJECT_ENUM_ID2: 70 + id = ENUM_ID_2; 71 + break; 72 + case GRAPH_OBJECT_ENUM_ID3: 73 + id = ENUM_ID_3; 74 + break; 75 + case GRAPH_OBJECT_ENUM_ID4: 76 + id = ENUM_ID_4; 77 + break; 78 + case GRAPH_OBJECT_ENUM_ID5: 79 + id = ENUM_ID_5; 80 + break; 81 + case GRAPH_OBJECT_ENUM_ID6: 82 + id = ENUM_ID_6; 83 + break; 84 + case GRAPH_OBJECT_ENUM_ID7: 85 + id = ENUM_ID_7; 86 + break; 87 + default: 88 + id = ENUM_ID_UNKNOWN; 89 + break; 90 + } 91 + 92 + return id; 93 + } 94 + 95 + static uint32_t gpu_id_from_bios_object_id(uint32_t bios_object_id) 96 + { 97 + return (bios_object_id & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT; 98 + } 99 + 100 + static enum encoder_id encoder_id_from_bios_object_id(uint32_t bios_object_id) 101 + { 102 + uint32_t bios_encoder_id = gpu_id_from_bios_object_id(bios_object_id); 103 + enum encoder_id id; 104 + 105 + switch (bios_encoder_id) { 106 + case ENCODER_OBJECT_ID_INTERNAL_LVDS: 107 + id = ENCODER_ID_INTERNAL_LVDS; 108 + break; 109 + case ENCODER_OBJECT_ID_INTERNAL_TMDS1: 110 + id = ENCODER_ID_INTERNAL_TMDS1; 111 + break; 112 + case ENCODER_OBJECT_ID_INTERNAL_TMDS2: 113 + id = ENCODER_ID_INTERNAL_TMDS2; 114 + break; 115 + case ENCODER_OBJECT_ID_INTERNAL_DAC1: 116 + id = ENCODER_ID_INTERNAL_DAC1; 117 + break; 118 + case ENCODER_OBJECT_ID_INTERNAL_DAC2: 119 + id = ENCODER_ID_INTERNAL_DAC2; 120 + break; 121 + case ENCODER_OBJECT_ID_INTERNAL_LVTM1: 122 + id = ENCODER_ID_INTERNAL_LVTM1; 123 + break; 124 + case ENCODER_OBJECT_ID_HDMI_INTERNAL: 125 + id = ENCODER_ID_INTERNAL_HDMI; 126 + break; 127 + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: 128 + id = ENCODER_ID_INTERNAL_KLDSCP_TMDS1; 129 + break; 130 + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1: 131 + id = ENCODER_ID_INTERNAL_KLDSCP_DAC1; 132 + break; 133 + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2: 134 + id = ENCODER_ID_INTERNAL_KLDSCP_DAC2; 135 + break; 136 + case ENCODER_OBJECT_ID_MVPU_FPGA: 137 + id = ENCODER_ID_EXTERNAL_MVPU_FPGA; 138 + break; 139 + case ENCODER_OBJECT_ID_INTERNAL_DDI: 140 + id = ENCODER_ID_INTERNAL_DDI; 141 + break; 142 + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: 143 + id = ENCODER_ID_INTERNAL_UNIPHY; 144 + break; 145 + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: 146 + id = ENCODER_ID_INTERNAL_KLDSCP_LVTMA; 147 + break; 148 + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: 149 + id = ENCODER_ID_INTERNAL_UNIPHY1; 150 + break; 151 + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: 152 + id = ENCODER_ID_INTERNAL_UNIPHY2; 153 + break; 154 + case ENCODER_OBJECT_ID_ALMOND: /* ENCODER_OBJECT_ID_NUTMEG */ 155 + id = ENCODER_ID_EXTERNAL_NUTMEG; 156 + break; 157 + case ENCODER_OBJECT_ID_TRAVIS: 158 + id = ENCODER_ID_EXTERNAL_TRAVIS; 159 + break; 160 + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY3: 161 + id = ENCODER_ID_INTERNAL_UNIPHY3; 162 + break; 163 + default: 164 + id = ENCODER_ID_UNKNOWN; 165 + ASSERT(0); 166 + break; 167 + } 168 + 169 + return id; 170 + } 171 + 172 + static enum connector_id connector_id_from_bios_object_id( 173 + uint32_t bios_object_id) 174 + { 175 + uint32_t bios_connector_id = gpu_id_from_bios_object_id(bios_object_id); 176 + 177 + enum connector_id id; 178 + 179 + switch (bios_connector_id) { 180 + case CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I: 181 + id = CONNECTOR_ID_SINGLE_LINK_DVII; 182 + break; 183 + case CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I: 184 + id = CONNECTOR_ID_DUAL_LINK_DVII; 185 + break; 186 + case CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D: 187 + id = CONNECTOR_ID_SINGLE_LINK_DVID; 188 + break; 189 + case CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D: 190 + id = CONNECTOR_ID_DUAL_LINK_DVID; 191 + break; 192 + case CONNECTOR_OBJECT_ID_VGA: 193 + id = CONNECTOR_ID_VGA; 194 + break; 195 + case CONNECTOR_OBJECT_ID_HDMI_TYPE_A: 196 + id = CONNECTOR_ID_HDMI_TYPE_A; 197 + break; 198 + case CONNECTOR_OBJECT_ID_LVDS: 199 + id = CONNECTOR_ID_LVDS; 200 + break; 201 + case CONNECTOR_OBJECT_ID_PCIE_CONNECTOR: 202 + id = CONNECTOR_ID_PCIE; 203 + break; 204 + case CONNECTOR_OBJECT_ID_HARDCODE_DVI: 205 + id = CONNECTOR_ID_HARDCODE_DVI; 206 + break; 207 + case CONNECTOR_OBJECT_ID_DISPLAYPORT: 208 + id = CONNECTOR_ID_DISPLAY_PORT; 209 + break; 210 + case CONNECTOR_OBJECT_ID_eDP: 211 + id = CONNECTOR_ID_EDP; 212 + break; 213 + case CONNECTOR_OBJECT_ID_MXM: 214 + id = CONNECTOR_ID_MXM; 215 + break; 216 + default: 217 + id = CONNECTOR_ID_UNKNOWN; 218 + break; 219 + } 220 + 221 + return id; 222 + } 223 + 224 + static enum generic_id generic_id_from_bios_object_id(uint32_t bios_object_id) 225 + { 226 + uint32_t bios_generic_id = gpu_id_from_bios_object_id(bios_object_id); 227 + 228 + enum generic_id id; 229 + 230 + switch (bios_generic_id) { 231 + case GENERIC_OBJECT_ID_MXM_OPM: 232 + id = GENERIC_ID_MXM_OPM; 233 + break; 234 + case GENERIC_OBJECT_ID_GLSYNC: 235 + id = GENERIC_ID_GLSYNC; 236 + break; 237 + case GENERIC_OBJECT_ID_STEREO_PIN: 238 + id = GENERIC_ID_STEREO; 239 + break; 240 + default: 241 + id = GENERIC_ID_UNKNOWN; 242 + break; 243 + } 244 + 245 + return id; 246 + } 247 + 248 + static uint32_t id_from_bios_object_id(enum object_type type, 249 + uint32_t bios_object_id) 250 + { 251 + switch (type) { 252 + case OBJECT_TYPE_GPU: 253 + return gpu_id_from_bios_object_id(bios_object_id); 254 + case OBJECT_TYPE_ENCODER: 255 + return (uint32_t)encoder_id_from_bios_object_id(bios_object_id); 256 + case OBJECT_TYPE_CONNECTOR: 257 + return (uint32_t)connector_id_from_bios_object_id( 258 + bios_object_id); 259 + case OBJECT_TYPE_GENERIC: 260 + return generic_id_from_bios_object_id(bios_object_id); 261 + default: 262 + return 0; 263 + } 264 + } 265 + 266 + struct graphics_object_id object_id_from_bios_object_id(uint32_t bios_object_id) 267 + { 268 + enum object_type type; 269 + enum object_enum_id enum_id; 270 + struct graphics_object_id go_id = { 0 }; 271 + 272 + type = object_type_from_bios_object_id(bios_object_id); 273 + 274 + if (OBJECT_TYPE_UNKNOWN == type) 275 + return go_id; 276 + 277 + enum_id = enum_id_from_bios_object_id(bios_object_id); 278 + 279 + if (ENUM_ID_UNKNOWN == enum_id) 280 + return go_id; 281 + 282 + go_id = dal_graphics_object_id_init( 283 + id_from_bios_object_id(type, bios_object_id), enum_id, type); 284 + 285 + return go_id; 286 + } 287 + 288 +
+33
drivers/gpu/drm/amd/display/dc/bios/bios_parser_common.h
··· 1 + /* 2 + * Copyright 2012-15 Advanced Micro Devices, Inc. 3 + * 4 + * Permission is hereby granted, free of charge, to any person obtaining a 5 + * copy of this software and associated documentation files (the "Software"), 6 + * to deal in the Software without restriction, including without limitation 7 + * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 + * and/or sell copies of the Software, and to permit persons to whom the 9 + * Software is furnished to do so, subject to the following conditions: 10 + * 11 + * The above copyright notice and this permission notice shall be included in 12 + * all copies or substantial portions of the Software. 13 + * 14 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18 + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19 + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20 + * OTHER DEALINGS IN THE SOFTWARE. 21 + * 22 + * Authors: AMD 23 + * 24 + */ 25 + 26 + #ifndef __BIOS_PARSER_COMMON_H__ 27 + #define __BIOS_PARSER_COMMON_H__ 28 + 29 + #include "dm_services.h" 30 + #include "ObjectID.h" 31 + 32 + struct graphics_object_id object_id_from_bios_object_id(uint32_t bios_object_id); 33 + #endif