From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?B?RnLDqWTDqXJpYyBMZXJveQ==?= Date: Thu, 13 Jun 2013 15:36:54 +0200 Subject: [U-Boot] [PATCH] LaCie kirkwood boards: allow disk > 2TB In-Reply-To: <20130613152115.65a4b5fb@lilith> References: <1370871053-14524-1-git-send-email-fredo@starox.org> <20130613133352.4fa73a9e@lilith> <51B9C335.9000803@starox.org> <20130613152115.65a4b5fb@lilith> Message-ID: <51B9CAF6.9070001@starox.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Le 13/06/2013 15:21, Albert ARIBAUD a ?crit : > > I guess CONFIG_LBA48 is also broken in common/cmd_ide.c : > > > > ulong ide_write(int device, ulong blknr, lbaint_t blkcnt, const void > > *buffer) > > { > > ulong n = 0; > > unsigned char c; > > > > #ifdef CONFIG_LBA48 > > unsigned char lba48 = 0; > > > > if (blknr & 0x0000fffff0000000ULL) { <= issue > > /* more than 28 bits used, use 48bit mode */ > > lba48 = 1; > > } > > #endif > > How is this broken exactly, and what is the fix? If you have a device with 0x100000000 blocks and a target architecture with sizeof(ulong)=32, then it will fail to switch to lba48. The right thing to do is to use lbaint_t instead of ulong blknr.