Honestly? I would've forgiven Mary. [Spoilers]
Well, maybe forgive is a strong word, but I think the current ending is a little too rough on her.
The fact of the matter is that they're BOTH victims of Carl's abuse. He took advantage of both of them, then disappeared without a trace (well, only coming back every so often to abuse Precious again). He was a monster that destroyed both of their lives, and Mary's way of coping with it was unfortunately taking it out on her daughter/grandkids. She sees them as a constant reminder/the manifestation of Carl's hideousness, and since he's not around to (rightfully) beat up on, she replaces him with them.
Even at the end of that movie during that gut-wrenching breakdown scene (seriously, it's one of the more *beep* up monologues I've ever seen put on film), she still can't bring herself to accept that it wasn't either one of their fault. In her mind, she clearly did something wrong to make the man she committed her life to not love her anymore over Precious. Obviously that's wrong, but that's how deep the scars run.
She really could've used Robin Williams to say to her "it's not your fault."
If I wrote this movie, I would've changed the ending where Precious actually realizes that, realizes that they have more in common than she thought, and while she may not move back in with her, she'd at least let Mary know that she feels her pain. Mary needs the same kind of help Precious got. Mary needs someone to reassure her that someone loves her too, something she never got from her abusive husband.