Hi Daniel,
It is perfectly OK to set SIM_SOPT2:SDHCSRC to a 20MHz source clock. In this case the SD bus clock cannot be more than 20MHz of course, but this is OK according to the SD Physical Specification Version 1.1.
However if you set SIM_SOPT2:SDHCSRC to a 20MHz source clock and then call the KSDK 2.4.2 function SD_CardInit(sd_card_t *card), then that function will call SDHC_SetSdClock(card->host.base, card->host.sourceClock_Hz, SD_CLOCK_25MHZ).
As you can see, if the value of srcClock_Hz is 20MHz and the value of busClock_Hz is 25MHz, then this line will not work:
assert((busClock_Hz != 0U) && (busClock_Hz <= srcClock_Hz));
This is a bug. When the SDK tries to set the bus clock greater than the source clock, it should instead set the bus clock to be equal to the source clock (i.e. 20MHz). This is in KSDK 2.4.2, file fsl_sdhc.c, function SDHC_SetSdClock, line 891.
Hope this helps,
Simon.