[PATCH] Samsung SoCs: OneNAND support
Kyungmin Park
kmpark at infradead.org
Thu Sep 17 06:02:09 EDT 2009
On Thu, Sep 17, 2009 at 6:45 PM, Kyungmin Park <kmpark at infradead.org> wrote:
> On Thu, Sep 17, 2009 at 5:31 PM, Artem Bityutskiy <dedekind1 at gmail.com> wrote:
>> On 09/17/2009 11:16 AM, Kyungmin Park wrote:
>>>
>>> +static int s3c_onenand_wait(struct mtd_info *mtd, int state)
>>> +{
>>> + unsigned int flags = INT_ACT;
>>> + unsigned int stat, ecc;
>>> + unsigned long timeout;
>>> +
>>> + switch (state) {
>>> + case FL_READING:
>>> + flags |= BLK_RW_CMP | LOAD_CMP;
>>> + break;
>>> + case FL_WRITING:
>>> + flags |= BLK_RW_CMP | PGM_CMP;
>>> + break;
>>> + case FL_ERASING:
>>> + flags |= BLK_RW_CMP | ERS_CMP;
>>> + break;
>>> + case FL_LOCKING:
>>> + flags |= BLK_RW_CMP;
>>> + break;
>>> + default:
>>> + break;
>>> + }
>>> +
>>> + /* The 20 msec is enough */
>>> + timeout = jiffies + msecs_to_jiffies(20);
>>> + while (time_before(jiffies, timeout)) {
>>> + stat = s3c_read_reg(INT_ERR_STAT_OFFSET);
>>> + if (stat& flags)
>>> + break;
>>> +
>>> + if (state != FL_READING)
>>> + cond_resched();
>>> + }
>>> + /* To get correct interrupt status in timeout case */
>>> + stat = s3c_read_reg(INT_ERR_STAT_OFFSET);
>>> + s3c_write_reg(stat, INT_ERR_ACK_OFFSET);
>>> +
>>> + /*
>>> + *
>>> + * In the Spec. it checks the controller status first
>>> + * However if you get the correct information in case of
>>> + * power off recovery (POR) test, it should read ECC status first
>>> + */
>>> + if (stat& LOAD_CMP) {
>>> + ecc = s3c_read_reg(ECC_ERR_STAT_OFFSET);
>>> + if (ecc& ONENAND_ECC_4BIT_UNCORRECTABLE) {
>>> + printk(KERN_INFO "onenand_wait: ECC error =
>>> 0x%04x\n", ecc);
>>
>> Copy-paste error? Also see below.
>
> Nice catch.
>
>>
>>> + mtd->ecc_stats.failed++;
>>> + return -EBADMSG;
>>> + }
>>> + }
>>> +
>>> + if (stat& (LOCKED_BLK | ERS_FAIL | PGM_FAIL | LD_FAIL_ECC_ERR)) {
>>> + printk(KERN_INFO "s3c_onenand_wait: controller error =
>>> 0x%04x\n", stat);
>>> + if (stat& LOCKED_BLK)
>>> + printk(KERN_INFO "s3c_onenand_wait: it's locked
>>> error = 0x%04x\n", stat);
>>
>> Very quick comment. Could you please avoid this style of putting function
>> name to the printk? We have lots of this in onenand_base.c, and they are
>> often wrong, because function names change.
>>
>> Could we please use dev_printk(), dev_dbg() and the like instead? You'll
FYI: In case of MTD,
dev_printk(), dev_dbg() not working. I used &mtd->dev,
Do you know how to set the dev instead of &mtd->dev?
Thank you,
Kyungmin Park
More information about the linux-mtd
mailing list