From owner-p4-projects@FreeBSD.ORG Wed Nov 29 07:09:45 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id E2E2816A675; Wed, 29 Nov 2006 07:09:33 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8D72116A608 for ; Wed, 29 Nov 2006 07:09:33 +0000 (UTC) (envelope-from imp@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.FreeBSD.org (Postfix) with ESMTP id 922E743CAE for ; Wed, 29 Nov 2006 07:09:23 +0000 (GMT) (envelope-from imp@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id kAT56EI5099090 for ; Wed, 29 Nov 2006 05:06:14 GMT (envelope-from imp@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id kAT56Eff099087 for perforce@freebsd.org; Wed, 29 Nov 2006 05:06:14 GMT (envelope-from imp@freebsd.org) Date: Wed, 29 Nov 2006 05:06:14 GMT Message-Id: <200611290506.kAT56Eff099087@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to imp@freebsd.org using -f From: Warner Losh To: Perforce Change Reviews Cc: Subject: PERFORCE change 110655 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Nov 2006 07:09:45 -0000 http://perforce.freebsd.org/chv.cgi?CH=110655 Change 110655 by imp@imp_lighthouse on 2006/11/29 05:05:17 Add some debug writes to try to track down why the eeprom hangs when we try to write to it when write enable is held high disabling write. I'm unsure how to detect this, but it seems to require a power cycle to reset the eeprom. Affected files ... .. //depot/projects/arm/src/sys/arm/at91/at91_twi.c#34 edit Differences ... ==== //depot/projects/arm/src/sys/arm/at91/at91_twi.c#34 (text+ko) ==== @@ -224,11 +224,16 @@ { int err = 0; int counter = 100000; + uint32_t sr; - while (!(RD4(sc, TWI_SR) & bit) && counter-- > 0) + while (!((sr = RD4(sc, TWI_SR)) & bit) && counter-- > 0) continue; if (counter <= 0) err = EBUSY; + else if (sr & TWI_SR_NACK) + err = EADDRNOTAVAIL; + if (sr & ~bit) + printf("status is %x\n", sr); return (err); } @@ -331,14 +336,20 @@ WR4(sc, TWI_THR, *buf++); if (len == 0) WR4(sc, TWI_CR, TWI_CR_STOP); - if ((err = at91_twi_wait(sc, TWI_SR_TXRDY))) + if ((err = at91_twi_wait(sc, TWI_SR_TXRDY))) { + printf("Len %d\n", len); goto out; + } } } if ((err = at91_twi_wait(sc, TWI_SR_TXCOMP))) break; } out:; + if (err) { + WR4(sc, TWI_CR, TWI_CR_STOP); + printf("Err is %d\n", err); + } AT91_TWI_UNLOCK(sc); return (err); }