Cross join table row with generate_series
Use a lateral join:
SELECT x, plans.name
FROM plans
CROSS JOIN LATERAL
   generate_series(timestamp '2021-01-01 06:00',
                   timestamp '2021-01-07 22:00',
                   plans.duration::interval) t(x)