To make it works (sort of) for me, what I ended up doing is adding a custom OpenDB script after global placement that "cleans up" and move cells overlapping what I defined as forbidden areas to the nearest valid area (possibly overlapping other cells but that's fine, detailed placement cleans that up for me).