R, 84 8181 67 bytes
Or R>=4.1, 7460 bytes by replacing the word function
with a \
.
Edit: -14 bytes thanks to @Giuseppe inspired by @Bubbler's Jelly answer.
function(n){m=t(n^21)
while(T<n){T=nrow(m)
m=rbind(n^2-T:1-F:n,t(T=nrow(m))+t(m[T:1,]))
F=F+T}
m}
Uses the common "rotate and add a row on top" approach.