Re: zl3073x flash: utility "family" register — 0x7C (driver) vs 0x7D (Microchip ZLS30733 reference)?
From: Ivan Vecera <ivecera@redhat.com>
Date: 2026-07-08 18:09:30
Hi Mike, On 7/8/26 7:08 PM, Mike Frandsen wrote:
Hi Ivan, While porting the zl3073x flash sequence to a small userspace tool for the ZL80732 (Azurite), we noticed a discrepancy between the mainline driver and Microchip's own reference flasher about which register holds the flash utility's "family" byte: - drivers/dpll/zl3073x/flash.c (as of 01e0e8b6a2d7) reads the family from register 0x7C and checks for 0x21; - Microchip's ZLS30733 reference code (shipped in their AZFB firmware bundle) reads the family from 0x7D (masking the low 7 bits) and treats 0x7C as a different field.
In the reference code there is a confusion... There are the following
constants defined:
static const Uint32T HOST_REG_VERSION = 0x007C;
static const Uint32T HOST_REG_FAMILY = 0x007D;
These constants are nowhere referenced and the code uses hardcoded
values:
utilityHash = HostRegister_read(pContext, 0x78, 4);
utilityFam = HostRegister_read(pContext, 0x7c, 1);
utilityRel = HostRegister_read(pContext, 0x7d, 1);
...
if (utilityFam != 0x21)
{
status = ZL303XX_INVALID_OPERATION;
...
}
So the family code reported by the utility at register address 0x7c and
should contain the value of 0x21.
We have not yet confirmed on hardware which location reports 0x21 after the utility loads (our port defensively accepts either). Do you know which location is authoritative per Microchip's documentation — and if it is 0x7D, whether flash.c's check works today by coincidence of the utility images it has been used with?
There is no official documentation for this :-( but according my test, all known utility versions reports 0x21 in reg 0x7c. Thanks, Ivan