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

ACPICA: ACPI 6.4: add CSI2Bus resource template

This commit the result of squashing the following:
ACPICA commit 21a316fdaa46b3fb245a1920f3829cb05d6ced6e
ACPICA commit f5506fc7dad08c2a25ef52cf836c2d67385a612c

Link: https://github.com/acpica/acpica/commit/21a316fd
Link: https://github.com/acpica/acpica/commit/f5506fc7
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Erik Kaneda <erik.kaneda@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

authored by

Bob Moore and committed by
Rafael J. Wysocki
a2befbb2 cca97d42

+183 -8
+4
drivers/acpi/acpica/acresrc.h
··· 46 46 ACPI_RSC_1BITFLAG, 47 47 ACPI_RSC_2BITFLAG, 48 48 ACPI_RSC_3BITFLAG, 49 + ACPI_RSC_6BITFLAG, 49 50 ACPI_RSC_ADDRESS, 50 51 ACPI_RSC_BITMASK, 51 52 ACPI_RSC_BITMASK16, ··· 103 102 ACPI_RSD_1BITFLAG, 104 103 ACPI_RSD_2BITFLAG, 105 104 ACPI_RSD_3BITFLAG, 105 + ACPI_RSD_6BITFLAG, 106 106 ACPI_RSD_ADDRESS, 107 107 ACPI_RSD_DWORDLIST, 108 108 ACPI_RSD_LITERAL, ··· 297 295 extern struct acpi_rsconvert_info acpi_rs_convert_ext_address64[]; 298 296 extern struct acpi_rsconvert_info acpi_rs_convert_gpio[]; 299 297 extern struct acpi_rsconvert_info acpi_rs_convert_fixed_dma[]; 298 + extern struct acpi_rsconvert_info acpi_rs_convert_csi2_serial_bus[]; 300 299 extern struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[]; 301 300 extern struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[]; 302 301 extern struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[]; ··· 352 349 extern struct acpi_rsdump_info acpi_rs_dump_pin_function[]; 353 350 extern struct acpi_rsdump_info acpi_rs_dump_fixed_dma[]; 354 351 extern struct acpi_rsdump_info acpi_rs_dump_common_serial_bus[]; 352 + extern struct acpi_rsdump_info acpi_rs_dump_csi2_serial_bus[]; 355 353 extern struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[]; 356 354 extern struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[]; 357 355 extern struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[];
+1
drivers/acpi/acpica/acutils.h
··· 28 28 extern const char *acpi_gbl_mem_decode[]; 29 29 extern const char *acpi_gbl_min_decode[]; 30 30 extern const char *acpi_gbl_mtp_decode[]; 31 + extern const char *acpi_gbl_phy_decode[]; 31 32 extern const char *acpi_gbl_rng_decode[]; 32 33 extern const char *acpi_gbl_rw_decode[]; 33 34 extern const char *acpi_gbl_shr_decode[];
+18 -1
drivers/acpi/acpica/amlresrc.h
··· 40 40 #define ACPI_RESTAG_IORESTRICTION "_IOR" 41 41 #define ACPI_RESTAG_LENGTH "_LEN" 42 42 #define ACPI_RESTAG_LINE "_LIN" 43 + #define ACPI_RESTAG_LOCALPORT "_PRT" 43 44 #define ACPI_RESTAG_MEMATTRIBUTES "_MTP" /* Memory(0), Reserved(1), ACPI(2), NVS(3) */ 44 45 #define ACPI_RESTAG_MEMTYPE "_MEM" /* non_cache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */ 45 46 #define ACPI_RESTAG_MAXADDR "_MAX" ··· 50 49 #define ACPI_RESTAG_MODE "_MOD" 51 50 #define ACPI_RESTAG_PARITY "_PAR" 52 51 #define ACPI_RESTAG_PHASE "_PHA" 52 + #define ACPI_RESTAG_PHYTYPE "_PHY" 53 53 #define ACPI_RESTAG_PIN "_PIN" 54 54 #define ACPI_RESTAG_PINCONFIG "_PPI" 55 55 #define ACPI_RESTAG_PINCONFIG_TYPE "_TYP" ··· 318 316 #define AML_RESOURCE_I2C_SERIALBUSTYPE 1 319 317 #define AML_RESOURCE_SPI_SERIALBUSTYPE 2 320 318 #define AML_RESOURCE_UART_SERIALBUSTYPE 3 321 - #define AML_RESOURCE_MAX_SERIALBUSTYPE 3 319 + #define AML_RESOURCE_CSI2_SERIALBUSTYPE 4 320 + #define AML_RESOURCE_MAX_SERIALBUSTYPE 4 322 321 #define AML_RESOURCE_VENDOR_SERIALBUSTYPE 192 /* Vendor defined is 0xC0-0xFF (NOT SUPPORTED) */ 323 322 324 323 struct aml_resource_common_serialbus { 325 324 AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_SERIAL_COMMON}; 325 + 326 + struct aml_resource_csi2_serialbus { 327 + AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_SERIAL_COMMON 328 + /* 329 + * Optional fields follow immediately: 330 + * 1) Vendor Data bytes 331 + * 2) Resource Source String 332 + */ 333 + }; 334 + 335 + #define AML_RESOURCE_CSI2_REVISION 1 /* ACPI 6.4 */ 336 + #define AML_RESOURCE_CSI2_TYPE_REVISION 1 /* ACPI 6.4 */ 337 + #define AML_RESOURCE_CSI2_MIN_DATA_LEN 0 /* ACPI 6.4 */ 326 338 327 339 struct aml_resource_i2c_serialbus { 328 340 AML_RESOURCE_LARGE_HEADER_COMMON ··· 526 510 struct aml_resource_i2c_serialbus i2c_serial_bus; 527 511 struct aml_resource_spi_serialbus spi_serial_bus; 528 512 struct aml_resource_uart_serialbus uart_serial_bus; 513 + struct aml_resource_csi2_serialbus csi2_serial_bus; 529 514 struct aml_resource_common_serialbus common_serial_bus; 530 515 struct aml_resource_pin_function pin_function; 531 516 struct aml_resource_pin_config pin_config;
+2 -2
drivers/acpi/acpica/rscalc.c
··· 677 677 *size_needed += buffer_size; 678 678 679 679 ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES, 680 - "Type %.2X, AmlLength %.2X InternalLength %.2X\n", 680 + "Type %.2X, AmlLength %.2X InternalLength %.2X%8X\n", 681 681 acpi_ut_get_resource_type(aml_buffer), 682 682 acpi_ut_get_descriptor_length(aml_buffer), 683 - buffer_size)); 683 + ACPI_FORMAT_UINT64(*size_needed))); 684 684 685 685 /* 686 686 * Point to the next resource within the AML stream using the length
+8
drivers/acpi/acpica/rsdump.c
··· 87 87 ("Invalid descriptor type (%X) in resource list\n", 88 88 resource_list->type); 89 89 return; 90 + } else if (!resource_list->type) { 91 + ACPI_ERROR((AE_INFO, "Invalid Zero Resource Type")); 92 + return; 90 93 } 91 94 92 95 /* Sanity check the length. It must not be zero, or we loop forever */ ··· 259 256 260 257 acpi_rs_out_string(name, 261 258 table->pointer[*target & 0x07]); 259 + break; 260 + 261 + case ACPI_RSD_6BITFLAG: 262 + 263 + acpi_rs_out_integer8(name, (ACPI_GET8(target) & 0x3F)); 262 264 break; 263 265 264 266 case ACPI_RSD_SHORTLIST:
+26
drivers/acpi/acpica/rsdumpinfo.c
··· 421 421 ACPI_RS_DUMP_COMMON_SERIAL_BUS 422 422 }; 423 423 424 + struct acpi_rsdump_info acpi_rs_dump_csi2_serial_bus[11] = { 425 + { ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_csi2_serial_bus), 426 + "Camera Serial Bus", NULL }, 427 + { ACPI_RSD_UINT8, ACPI_RSD_OFFSET(csi2_serial_bus.revision_id), 428 + "RevisionId", NULL }, 429 + { ACPI_RSD_UINT8, ACPI_RSD_OFFSET(csi2_serial_bus.type), "Type", 430 + acpi_gbl_sbt_decode }, 431 + { ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(csi2_serial_bus.producer_consumer), 432 + "ProducerConsumer", acpi_gbl_consume_decode }, 433 + { ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(csi2_serial_bus.slave_mode), 434 + "SlaveMode", acpi_gbl_sm_decode }, 435 + { ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(csi2_serial_bus.phy_type), 436 + "PhyType", acpi_gbl_phy_decode }, 437 + { ACPI_RSD_6BITFLAG, 438 + ACPI_RSD_OFFSET(csi2_serial_bus.local_port_instance), 439 + "LocalPortInstance", NULL }, 440 + { ACPI_RSD_UINT8, ACPI_RSD_OFFSET(csi2_serial_bus.type_revision_id), 441 + "TypeRevisionId", NULL }, 442 + { ACPI_RSD_UINT16, ACPI_RSD_OFFSET(csi2_serial_bus.vendor_length), 443 + "VendorLength", NULL }, 444 + { ACPI_RSD_SHORTLISTX, ACPI_RSD_OFFSET(csi2_serial_bus.vendor_data), 445 + "VendorData", NULL }, 446 + { ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(csi2_serial_bus.resource_source), 447 + "ResourceSource", NULL }, 448 + }; 449 + 424 450 struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[14] = { 425 451 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_i2c_serial_bus), 426 452 "I2C Serial Bus", NULL},
+5 -1
drivers/acpi/acpica/rsinfo.c
··· 96 96 acpi_rs_convert_pin_group_config, /* 0x12, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG */ 97 97 }; 98 98 99 - /* Subtype table for serial_bus -- I2C, SPI, and UART */ 99 + /* Subtype table for serial_bus -- I2C, SPI, UART, and CSI2 */ 100 100 101 101 struct acpi_rsconvert_info *acpi_gbl_convert_resource_serial_bus_dispatch[] = { 102 102 NULL, 103 103 acpi_rs_convert_i2c_serial_bus, 104 104 acpi_rs_convert_spi_serial_bus, 105 105 acpi_rs_convert_uart_serial_bus, 106 + acpi_rs_convert_csi2_serial_bus 106 107 }; 107 108 108 109 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUGGER) ··· 143 142 acpi_rs_dump_i2c_serial_bus, /* AML_RESOURCE_I2C_BUS_TYPE */ 144 143 acpi_rs_dump_spi_serial_bus, /* AML_RESOURCE_SPI_BUS_TYPE */ 145 144 acpi_rs_dump_uart_serial_bus, /* AML_RESOURCE_UART_BUS_TYPE */ 145 + acpi_rs_dump_csi2_serial_bus, /* AML_RESOURCE_CSI2_BUS_TYPE */ 146 146 }; 147 147 #endif 148 148 ··· 228 226 sizeof(struct aml_resource_i2c_serialbus), 229 227 sizeof(struct aml_resource_spi_serialbus), 230 228 sizeof(struct aml_resource_uart_serialbus), 229 + sizeof(struct aml_resource_csi2_serialbus), 231 230 }; 232 231 233 232 const u8 acpi_gbl_resource_struct_serial_bus_sizes[] = { ··· 236 233 ACPI_RS_SIZE(struct acpi_resource_i2c_serialbus), 237 234 ACPI_RS_SIZE(struct acpi_resource_spi_serialbus), 238 235 ACPI_RS_SIZE(struct acpi_resource_uart_serialbus), 236 + ACPI_RS_SIZE(struct acpi_resource_csi2_serialbus), 239 237 };
+7 -2
drivers/acpi/acpica/rslist.c
··· 59 59 AML_RESOURCE_MAX_SERIALBUSTYPE) { 60 60 conversion_table = NULL; 61 61 } else { 62 - /* This is an I2C, SPI, or UART serial_bus descriptor */ 62 + /* This is an I2C, SPI, UART, or CSI2 serial_bus descriptor */ 63 63 64 64 conversion_table = 65 65 acpi_gbl_convert_resource_serial_bus_dispatch ··· 87 87 "Could not convert AML resource (Type 0x%X)", 88 88 *aml)); 89 89 return_ACPI_STATUS(status); 90 + } 91 + 92 + if (!resource->length) { 93 + ACPI_EXCEPTION((AE_INFO, status, 94 + "Zero-length resource returned from RsConvertAmlToResource")); 90 95 } 91 96 92 97 ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES, ··· 163 158 AML_RESOURCE_MAX_SERIALBUSTYPE) { 164 159 conversion_table = NULL; 165 160 } else { 166 - /* This is an I2C, SPI, or UART serial_bus descriptor */ 161 + /* This is an I2C, SPI, UART or CSI2 serial_bus descriptor */ 167 162 168 163 conversion_table = 169 164 acpi_gbl_convert_resource_serial_bus_dispatch
+19
drivers/acpi/acpica/rsmisc.c
··· 70 70 */ 71 71 count = INIT_TABLE_LENGTH(info); 72 72 while (count) { 73 + target = NULL; 74 + 73 75 /* 74 76 * Source is the external AML byte stream buffer, 75 77 * destination is the internal resource descriptor ··· 120 118 */ 121 119 ACPI_SET8(destination, 122 120 ((ACPI_GET8(source) >> info->value) & 0x07)); 121 + break; 122 + 123 + case ACPI_RSC_6BITFLAG: 124 + /* 125 + * Mask and shift the flag bits 126 + */ 127 + ACPI_SET8(destination, 128 + ((ACPI_GET8(source) >> info->value) & 0x3F)); 123 129 break; 124 130 125 131 case ACPI_RSC_COUNT: ··· 516 506 */ 517 507 ACPI_SET_BIT(*ACPI_CAST8(destination), (u8) 518 508 ((ACPI_GET8(source) & 0x07) << info-> 509 + value)); 510 + break; 511 + 512 + case ACPI_RSC_6BITFLAG: 513 + /* 514 + * Mask and shift the flag bits 515 + */ 516 + ACPI_SET_BIT(*ACPI_CAST8(destination), (u8) 517 + ((ACPI_GET8(source) & 0x3F) << info-> 519 518 value)); 520 519 break; 521 520
+75
drivers/acpi/acpica/rsserial.c
··· 187 187 188 188 /******************************************************************************* 189 189 * 190 + * acpi_rs_convert_csi2_serial_bus 191 + * 192 + ******************************************************************************/ 193 + 194 + struct acpi_rsconvert_info acpi_rs_convert_csi2_serial_bus[14] = { 195 + { ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, 196 + ACPI_RS_SIZE(struct acpi_resource_csi2_serialbus), 197 + ACPI_RSC_TABLE_SIZE(acpi_rs_convert_csi2_serial_bus) }, 198 + 199 + { ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS, 200 + sizeof(struct aml_resource_csi2_serialbus), 201 + 0 }, 202 + 203 + { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id), 204 + AML_OFFSET(common_serial_bus.revision_id), 205 + 1 }, 206 + 207 + { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.csi2_serial_bus.type), 208 + AML_OFFSET(csi2_serial_bus.type), 209 + 1 }, 210 + 211 + { ACPI_RSC_1BITFLAG, 212 + ACPI_RS_OFFSET(data.csi2_serial_bus.producer_consumer), 213 + AML_OFFSET(csi2_serial_bus.flags), 214 + 1 }, 215 + 216 + { ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.csi2_serial_bus.slave_mode), 217 + AML_OFFSET(csi2_serial_bus.flags), 218 + 0 }, 219 + 220 + { ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.csi2_serial_bus.phy_type), 221 + AML_OFFSET(csi2_serial_bus.type_specific_flags), 222 + 0 }, 223 + 224 + { ACPI_RSC_6BITFLAG, 225 + ACPI_RS_OFFSET(data.csi2_serial_bus.local_port_instance), 226 + AML_OFFSET(csi2_serial_bus.type_specific_flags), 227 + 2 }, 228 + 229 + { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.csi2_serial_bus.type_revision_id), 230 + AML_OFFSET(csi2_serial_bus.type_revision_id), 231 + 1 }, 232 + 233 + /* Vendor data */ 234 + 235 + { ACPI_RSC_COUNT_SERIAL_VEN, 236 + ACPI_RS_OFFSET(data.csi2_serial_bus.vendor_length), 237 + AML_OFFSET(csi2_serial_bus.type_data_length), 238 + AML_RESOURCE_CSI2_MIN_DATA_LEN }, 239 + 240 + { ACPI_RSC_MOVE_SERIAL_VEN, 241 + ACPI_RS_OFFSET(data.csi2_serial_bus.vendor_data), 242 + 0, 243 + sizeof(struct aml_resource_csi2_serialbus) }, 244 + 245 + /* Resource Source */ 246 + 247 + { ACPI_RSC_MOVE8, 248 + ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.index), 249 + AML_OFFSET(csi2_serial_bus.res_source_index), 250 + 1 }, 251 + 252 + { ACPI_RSC_COUNT_SERIAL_RES, 253 + ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.string_length), 254 + AML_OFFSET(csi2_serial_bus.type_data_length), 255 + sizeof(struct aml_resource_csi2_serialbus) }, 256 + 257 + { ACPI_RSC_MOVE_SERIAL_RES, 258 + ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.string_ptr), 259 + AML_OFFSET(csi2_serial_bus.type_data_length), 260 + sizeof(struct aml_resource_csi2_serialbus) }, 261 + }; 262 + 263 + /******************************************************************************* 264 + * 190 265 * acpi_rs_convert_i2c_serial_bus 191 266 * 192 267 ******************************************************************************/
+9 -1
drivers/acpi/acpica/utresdecode.c
··· 82 82 "AddressRangeNVS" 83 83 }; 84 84 85 + const char *acpi_gbl_phy_decode[] = { 86 + "Type C", 87 + "Type D", 88 + "Unknown Type", 89 + "Unknown Type" 90 + }; 91 + 85 92 const char *acpi_gbl_rng_decode[] = { 86 93 "InvalidRanges", 87 94 "NonISAOnlyRanges", ··· 168 161 "/* UNKNOWN serial bus type */", 169 162 "I2C", 170 163 "SPI", 171 - "UART" 164 + "UART", 165 + "CSI2" 172 166 }; 173 167 174 168 /* I2C serial bus access mode */
+1
drivers/acpi/acpica/utresrc.c
··· 64 64 ACPI_AML_SIZE_LARGE(struct aml_resource_i2c_serialbus), 65 65 ACPI_AML_SIZE_LARGE(struct aml_resource_spi_serialbus), 66 66 ACPI_AML_SIZE_LARGE(struct aml_resource_uart_serialbus), 67 + ACPI_AML_SIZE_LARGE(struct aml_resource_csi2_serialbus), 67 68 }; 68 69 69 70 /*
+8 -1
include/acpi/acrestyp.h
··· 381 381 #define ACPI_IO_RESTRICT_OUTPUT 2 382 382 #define ACPI_IO_RESTRICT_NONE_PRESERVE 3 383 383 384 - /* Common structure for I2C, SPI, and UART serial descriptors */ 384 + /* Common structure for I2C, SPI, UART, CSI2 serial descriptors */ 385 385 386 386 #define ACPI_RESOURCE_SERIAL_COMMON \ 387 387 u8 revision_id; \ ··· 403 403 #define ACPI_RESOURCE_SERIAL_TYPE_I2C 1 404 404 #define ACPI_RESOURCE_SERIAL_TYPE_SPI 2 405 405 #define ACPI_RESOURCE_SERIAL_TYPE_UART 3 406 + #define ACPI_RESOURCE_SERIAL_TYPE_CSI2 4 406 407 407 408 /* Values for slave_mode field above */ 408 409 ··· 505 504 #define ACPI_UART_DATA_TERMINAL_READY (1<<5) 506 505 #define ACPI_UART_CLEAR_TO_SEND (1<<6) 507 506 #define ACPI_UART_REQUEST_TO_SEND (1<<7) 507 + 508 + struct acpi_resource_csi2_serialbus { 509 + ACPI_RESOURCE_SERIAL_COMMON u8 local_port_instance; 510 + u8 phy_type; 511 + }; 508 512 509 513 struct acpi_resource_pin_function { 510 514 u8 revision_id; ··· 640 634 struct acpi_resource_i2c_serialbus i2c_serial_bus; 641 635 struct acpi_resource_spi_serialbus spi_serial_bus; 642 636 struct acpi_resource_uart_serialbus uart_serial_bus; 637 + struct acpi_resource_csi2_serialbus csi2_serial_bus; 643 638 struct acpi_resource_common_serialbus common_serial_bus; 644 639 struct acpi_resource_pin_function pin_function; 645 640 struct acpi_resource_pin_config pin_config;