As discovered in T163777 check_hpssacli failed to report a "no battery" situation and (consequently?) a cache permanently disabled.
It looks like battery status isn't reported at all in show (but it is in show detail) in case the battery isn't there:
root@ms-be1022:~# hpssacli controller slot=3 show status Smart Array P840 in Slot 3 Controller Status: OK Cache Status: OK Battery/Capacitor Status: OK root@ms-be1021:~# hpssacli controller slot=3 show status Smart Array P840 in Slot 3 Controller Status: OK Cache Status: Permanently Disabled
Looking at the code, check_hpssacli skips checking cache status because it check individual LD's acceleration method instead, though I think in this case sth was wrong with the battery and therefore the cache so it should have been catched.