Thanks Carlos- yes, it describes gpio-ranges, but not the iomuxc part of it.
Empirically I think I've figured it out- it seems that that the first number is the start of the range, the 2nd number, when multiplied by 4 is the offset to the iomuxc control register (starting at 20E_0000h) and the third number is the number of bits in the group.
So for this entry (gpio1):
gpio-ranges = <&iomuxc 0 23 10>, <&iomuxc 10 17 6>, <&iomuxc 16 33 16>;
Now the GPIO1 registers aren't contiguous, there are 3 groups, hence 3 entries in the gpio-ranges statement.
First group is GPIO1.0 - GPIO1.9, base offset = 23 * 4 = 0x5c which is IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00
Second group is GPIO1.10 - GPIO1.15, base offset = 17 * 4 = 0x44 which is IOMUXC_SW_MUX_CTL_PAD_JTAG_MOD
Third group is GPIO1.16 - GPIO1.31, base offset = 33 * 4 = 0x84 which is IOMUXC_SW_MUX_CTL_PAD_UART1_TX_DATA