DF-4942 / fixrun.log
== domain constants (gpio_types.h) ==
GPIO_DDC_LINE_DDC1=0 DDC6=5 DDC_VGA=6 I2C_PAD(==VIP_PAD)=7 COUNT=8
GPIO_ENUM_UNKNOWN=32 GPIO_GPIO_PAD_MAX=30
consumer arrays: hpd_regs[6] ddc_data_regs[8] (hw_factory_dce80.c)
== T1: DDC/VGA/I2CPAD offsets return success WITHOUT writing *id ==
(dal_gpio_service_create_irq gpio_service.c:148 declares 'enum gpio_id id;' uninitialized)
offset_to_id(mmDC_GPIO_DDCVGA_A,0x100) = true en=6(id==GPIO_ID_DDC_DATA(0))
-> FIXED: *id now written (GPIO_ID_DDC_DATA), consumer guard accepts
offset_to_id(mmDC_GPIO_I2CPAD_A,0x1) = true en=7(id==GPIO_ID_DDC_DATA(0))
offset_to_id(mmDC_GPIO_DDC1_A,0x100) = true en=0(id==GPIO_ID_DDC_DATA(0))
== T2: GPIOPAD offset succeeds with en up to 30 (DF-4942 producer) ==
(dal_gpio_create_ddc ignores id and feeds en to ddc_data_regs[8])
offset_to_id(mmGPIOPAD_A,1<<20) = true id=GPIO_ID_GPIO_PAD(4) en=20
-> FIXED: translate still decodes en=20, but fixed consumer guard (id != GPIO_ID_DDC_DATA) rejects: accepted=0 -> no ddc_data_regs[20] OOB
offset_to_id(mmGPIOPAD_A,1<<7) = true en=7 (in-bounds, no OOB)
== T3 (negative): GPIOPAD en bound inside offset_to_id is sound ==
offset_to_id(mmGPIOPAD_A,1<<31) = false en=31 (31>30 rejected: OK)
[BREAK_TO_DEBUGGER hit]
offset_to_id(mmGPIOPAD_A,0x3) = false en=32 (multi-bit->UNKNOWN=32 rejected: OK)
[BREAK_TO_DEBUGGER hit]
offset_to_id(mmGPIOPAD_A,0x0) = false en=32 (zero->UNKNOWN=32 rejected: OK)
== T4: id_to_offset GPIO_PAD compares MASK vs INDEX (DF-4944) ==
id_to_offset(GPIO_PAD,en=5) = true mask=0x20 (pad 5 VALID: now accepted, mask==1<<5)
id_to_offset(GPIO_PAD,en=30) = true mask=0x40000000 (pad 30 VALID: now accepted)
id_to_offset(GPIO_PAD,en=32) = false (en=32 INVALID: now rejected)
id_to_offset(GPIO_PAD,en=64) = false (invalid: now rejected)
== T5 (negative): HPD id_to_offset rejects en>=6 ==
id_to_offset(HPD,en=5) = true (OK)
[BREAK_TO_DEBUGGER hit]
id_to_offset(HPD,en=6) = false (rejected: OK — only the uninit-id path can smuggle en>=6 into hpd_regs)
0 regressions after fix (expect 0)
FIXRUN_EXIT=0