mpc83xx_clk: always treat MPC83XX_CLK_PCI as invalid
authorRasmus Villemoes <rasmus.villemoes@prevas.dk>
Thu, 19 Dec 2019 09:46:08 +0000 (09:46 +0000)
committerMario Six <mario.six@gdsys.cc>
Wed, 8 Jan 2020 07:14:36 +0000 (08:14 +0100)
commitfddf876a8f56ff53d1354387ebf7fd3997189349
tree09ac3204e9309a3cbf23135d4d1410c3c7eb066c
parent42a13a0b9faf88da332675c997f06a063fc77133
mpc83xx_clk: always treat MPC83XX_CLK_PCI as invalid

The current mpc83xx_clk driver is broken for any board for which
mpc83xx_has_pci() is true, i.e. anything not MPC8308:

When is_clk_valid() reports that MPC83XX_CLK_PCI is valid,
init_all_clks() proceeds to call init_single_clk(), but that doesn't
know about either MPC83XX_CLK_PCI or has any handling of the
TYPE_SCCR_ONOFF mode correctly returned by retrieve_mode(). Hence
init_single_clk() ends up returning -EINVAL, and the whole board hangs
in serial_init().

The quickest fix is to simply pretend that clock is invalid for
all, since nobody can have been relying on it. Adding proper support
seems to be a bit more involved than just handling TYPE_SCCR_ONOFF:

- The power-on-reset value of SCCR[PCICM] is 0, so
  mpc83xx_clk_enable() would probably need to be tought to enable the
  clock.

- The frequency of PCI_SYNC_OUT is either SYS_CLK_IN or SYS_CLK_IN/2
  depending on the CFG_CLKIN_DIV configuration input, but that can't
  be read from software, so to properly fill out
  ->speed[MPC83XX_CLK_PCI] I think one would need guidance from
  Kconfig or dtb.

Partially fixes: 07d538d281 clk: Add MPC83xx clock driver

Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Reviewed-by: Mario Six <mario.six@gdsys.cc>
drivers/clk/mpc83xx_clk.c