In other words for some revisions of the MGA 400 chip family you need to use the binary mga_hal module to make dualhead mode work. My system uses an MGA 550 so it doesn't need one. I have no idea where you would get the mga_hal from or what you'd do with it, I just know it's a binary blob you need to get from whoever wrote the mga driver.
Zaist: The mga_hal error you've got is generated if the driver decides it needs the HAL using this macro:
#define MGA_DH_NEEDS_HAL(x) (((x)->Chipset == PCI_CHIP_MGAG400) && \
((x)-> ChipRev < 0x80))
In other words for some revisions of the MGA 400 chip family you need to use the binary mga_hal module to make dualhead mode work. My system uses an MGA 550 so it doesn't need one. I have no idea where you would get the mga_hal from or what you'd do with it, I just know it's a binary blob you need to get from whoever wrote the mga driver.