Try the following. Here is your initial code.
i = 1; a = 0.03; c = 2; A = 0; Subscript[E, CX] = i (Cos[\[Gamma]] (Cos[\[Theta]] Cos[\[Phi]] - A Sin[\[Theta]]) + Cos[\[Theta]] Sin[\[Gamma]] Sin[\[Phi]]); Subscript[E, CY] = i Sin[\[Gamma] - \[Phi]]; Subscript[E, CZ] = (A Cos[\[Gamma]] Cos[\[Theta]] + Cos[\[Gamma]] Cos[\[Phi]] Sin[\[Theta]] + Sin[\[Gamma]] Sin[\[Theta]] Sin[\[Phi]]); d = {{0, 0, 0, 0, a, -c}, {-c, c, 0, a, 0, 0}, {a, a, 0, 0, 0, 0}}; f = {{Subscript[E, CX]^2}, {Subscript[E, CY]^2}, {Subscript[E, CZ]^2}, {2 Subscript[E, CY]* Subscript[E, CZ]}, {2 Subscript[E, CX]* Subscript[E, CZ]}, {2 Subscript[E, CX]*Subscript[E, CY]}}; p[\[Gamma]_, \[Phi]_, \[Theta]_] = 2*d.f; r[w_, z_] := {{0, 0, 0}, {Cos[z]*Cos[w], Cos[z]*Sin[w], -Sin[w]}, {-Sin[w], Cos[w], 0}}; e[\[Gamma]_, \[Phi]_, \[Theta]_, w_, z_] := r[w, z].p[\[Gamma], \[Phi], \[Theta]];
I only removed the SetDelayed where it is not needed.
The following makes the job:
grid2 = Rasterize[Panel[GraphicsGrid[Table[ PolarPlot[ Norm[p[\[Gamma], \[Phi], \[Theta]]]^2, {\[Gamma], 0, 2 Pi}, ColorFunction -> GrayLevel, PerformanceGoal -> "Quality", PlotRange -> All, PlotTheme -> "Monochrome", FrameLabel -> None, PlotLabel -> None, Ticks -> None, PolarAxes -> False, PolarGridLines -> {None, {Norm[p[0, 0, 0]]^2}}, PolarAxesOrigin -> {0, Norm[p[0, 0, 0]]^2}, ImageSize -> 150, Epilog -> {Inset[Column[{ Row[{Style["\[Theta]=", 9], Style[\[Theta], 9]}], Row[{Style["\[Phi]=", 9], Style[\[Phi], 9]}] }], Scaled[{0.1, 0.8}]]}], {\[Theta], {0, 2 Pi/20, 4 Pi/20, 6 Pi/20, 8 Pi/20, 10 Pi/20}}, {\[Phi], {0, 2 Pi/10, 4 Pi/10, 6 Pi/10, 8 Pi/10, 10 Pi/10}}], Spacings -> {0, 0}, Frame -> True], Background -> White], RasterSize -> 1000, ImageSize -> 600]

Note please that Rasterize is not absolutely necessary here. I simply wanted to play with the overall size in the end. One can, however do the same without it.
Have fun!
PlotLabelto each plot. you should post the code here by the way. $\endgroup$