キャストできることが保証されるなら、

commonFunc( 1, 2, a => func1(a as B) );

でいけるが、拡張メソッドで

public static void CommonFunc<T>( this T obj, int p1, int p2, Action<T> f ) where T : A;

とするのがスマートかも