[U-Boot] [PATCH] mmc: seperate block number into small parts for multi-write cmd

Lei Wen adrian.wenl at gmail.com
Sun Oct 10 11:42:36 CEST 2010


Hi Reinhard,

On Sun, Oct 10, 2010 at 5:33 PM, Reinhard Meyer
<u-boot at emk-elektronik.de> wrote:
> Dear all concerned,
>>
>> But my (limited!) understanding is that it's not a platform problem
>> you are solving, but one of this special kind of controller, which
>> nobody else would ever run into.
>
> I would vouch to extend
>
> struct mmc {
>        struct list_head link;
>        char name[32];
>        void *priv;
>        uint voltages;
>        uint version;
>        uint f_min;
>        uint f_max;
>        int high_capacity;
>        uint bus_width;
>        uint clock;
>        uint card_caps;
>        uint host_caps;
> +       uint host_maxblk;
> +       uint host_maxdmalen;
>        uint ocr;
>        uint scr[2];
>        uint csd[4];
>        uint cid[4];
>        ushort rca;
>        uint tran_speed;
>        uint read_bl_len;
>        uint write_bl_len;
>        u64 capacity;
>        block_dev_desc_t block_dev;
>        int (*send_cmd)(struct mmc *mmc,
>                        struct mmc_cmd *cmd, struct mmc_data *data);
>        void (*set_ios)(struct mmc *mmc);
>        int (*init)(struct mmc *mmc);
> };
>
> have the driver fill those values and the common mmc part act upon them,
> provided they are non-zero. Zero means no limitation on the host side.

I like this modification.
>
> This should not break existing code.
>
> I fail, however, to understand the 512 KiB limit on that hardware. It
> would allow for only 1024 blocks, despite the 65535 allowed by the register.
> Also I assume that limit is about a 512k boundary, not a 512k length???
>
Yes, the 512KiB is intend to be a dma boudary.
The 512 KiB is used by Linux, for it didn't want to handle the DMA
interrupt, I guess so.

Best regards,
Lei


More information about the U-Boot mailing list