[U-Boot] [PATCH v3 3/4] MX5: Introduce a function for setting the chip select size
Fabio Estevam
festevam at gmail.com
Thu May 19 13:49:41 CEST 2011
Hi Stefano,
On Thu, May 19, 2011 at 5:46 AM, Stefano Babic <sbabic at denx.de> wrote:
> On 05/18/2011 10:47 PM, Fabio Estevam wrote:
>> Signed-off-by: Fabio Estevam <fabio.estevam at freescale.com>
>> ---
>
> Hi Fabio,
>
>> +void set_chipselect_size(int const cs_size)
>> +{
>> + unsigned int reg;
>> + struct iomuxc *iomuxc_regs = (struct weim *)IOMUXC_BASE_ADDR;
>> + reg = readl(&iomuxc_regs->gpr1);
>> +
>> + switch (cs_size) {
>> + case CS0_128:
>> + reg &= ~0x7; /* CS0=128MB, CS1=0, CS2=0, CS3=0 */
>> + reg |= 0x5;
>> + break;
>> + case CS0_64M_CS1_64M:
>> + reg &= ~0x3F; /* CS0=64MB, CS1=64MB, CS2=0, CS3=0 */
>> + reg |= 0x1B;
>> + break;
>> + case CS0_64M_CS1_32M_CS2_32M:
>> + reg &= ~0x1FF; /* CS0=64MB, CS1=32MB, CS2=32MB, CS3=0 */
>> + reg |= 0x4B;
>> + break;
>> + case CS0_32M_CS1_32M_CS2_32M_CS3_32M:
>> + reg &= ~0xFFF; /* CS0=32MB, CS1=32MB, CS2=32MB, CS3=32MB */
>> + reg |= 0x249;
>> + break;
>> + default:
>> + printf("Unknown chip select size\n");
>> + break;
>> + }
>> +
>> + writel(reg, &iomuxc_regs->gpr1);
>> +}
>
> mmmhhh...it seems to me not complete, because not all combinations are
> covered.
Yes, it is complete. Only these four combinations are allowed as per
the MX53 Reference Manual.
>And setting fixed values in the switch constraints us to have
> very long defines, as CS0_32M_CS1_32M_CS2_32M_CS3_32M.
I can change the very long defines if you want.
I thought initially on doing the generic function as you described,
but then we would need to check for only the 4 valid combinations.
Then I came with this implementation that only handle the 4 possible
cases.
Let me know what you think.
Regards,
Fabio Estevam
More information about the U-Boot
mailing list