Message ID | 1370871053-14524-1-git-send-email-fredo@starox.org |
---|---|
State | Changes Requested |
Delegated to: | Albert ARIBAUD |
Headers | show |
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Le 10/06/2013 15:44, Simon Guinot a écrit : > On Mon, Jun 10, 2013 at 03:30:53PM +0200, Frederic Leroy wrote: > > From: Frédéric Leroy <fredo@starox.org> > > > > For big disk support, we need LBA addressing on 64 bits > > --- > > include/configs/lacie_kw.h | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/include/configs/lacie_kw.h b/include/configs/lacie_kw.h > > index 09b5798..847afcd 100644 > > --- a/include/configs/lacie_kw.h > > +++ b/include/configs/lacie_kw.h > > @@ -111,6 +111,7 @@ > > #define CONFIG_ENV_SPI_MAX_HZ 20000000 /* 20Mhz */ > > #define CONFIG_SYS_IDE_MAXBUS 1 > > #define CONFIG_SYS_IDE_MAXDEVICE 1 > > +#define CONFIG_SYS_64BIT_LBA /* Allow disk > 2.1TB */ > > Hi Frederic, > > I see a comment at disk/part_efi.c:25. It claims that maximum size of > addressable storage is limited to 2TB even with CONFIG_SYS_64BIT_LBA > enabled. Is that not true anymore ? I didn't see this comment. With my patch, the "ide reset" command recognize nicely a 3TB harddrive. Else, it reports the size % 2TB and then u-boot reports error in the GPT. I can read the GPT and boot from a loaded file from the first partition. However, an "ext2ls" on a partition at the end of the disk outputs garbage. At least, the patch allow to use the first 2 TB for booting. Regards, - -- Frédéric -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQGcBAEBAgAGBQJRteDBAAoJEJVX96CfzRSe7CsMAJF7A6b29E4jTH9p2uBSLYDZ Rg1Oeag0J9UI44LKfhAjexfDP0I0gF8B+IB4ZQ1VZiKeNL3Udocy+J57KBzoefi1 SY39c8uw8qWszxJqxdZ0n+MGNMRL3cKsOaNtG5Jf81knohl5OVjmiscdzy/0MNB/ +zPB3tsydAjPnR1B8J655jqXlcH0Cd23BX7cJoufnJN6jfaiPdBsurobIfKkLwrO Pd1WLxcaZN+GwqRnYJkB6Y4yuYZwfLelhBkqUDVJy/dF38YBHzjHUmq1YUdS7ret flMexv1UrqWO6QCVQ95e3nTFmRkH2Dqyi8JkyfMHFzuhOzidRtSYSxVS9ArqdRA8 7fHRshEA6FY62tiQ4aMZ9vj0tq3Vjy0QZKkOfpwUw338oVHyeCdpVJR3O4vkzzqh NGIjA+fmJMTWT69J7Is53ZmheoSK0Ih/LEvyMYXyzSJsq+qodKqYsDwYfaHsVbjK ti9yaCwozotaJoauB2bXWM8AjJfnE8Y2U0/AHOjX6g== =Nisn -----END PGP SIGNATURE-----
Hi Frederic, On Mon, 10 Jun 2013 15:30:53 +0200, Frederic Leroy <fredo@starox.org> wrote: > From: Frédéric Leroy <fredo@starox.org> > > For big disk support, we need LBA addressing on 64 bits > --- > include/configs/lacie_kw.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/include/configs/lacie_kw.h b/include/configs/lacie_kw.h > index 09b5798..847afcd 100644 > --- a/include/configs/lacie_kw.h > +++ b/include/configs/lacie_kw.h > @@ -111,6 +111,7 @@ > #define CONFIG_ENV_SPI_MAX_HZ 20000000 /* 20Mhz */ > #define CONFIG_SYS_IDE_MAXBUS 1 > #define CONFIG_SYS_IDE_MAXDEVICE 1 > +#define CONFIG_SYS_64BIT_LBA /* Allow disk > 2.1TB */ > #if defined(CONFIG_D2NET_V2) > #define CONFIG_SYS_PROMPT "d2v2> " > #elif defined(CONFIG_NET2BIG_V2) With gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) this patch causes the following warning for all boards: cmd_ide.c:992:4: warning: right shift count >= width of type [enabled by default] Amicalement,
Le 13/06/2013 13:33, Albert ARIBAUD a écrit : > With gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) this patch causes > the following warning for all boards: > > cmd_ide.c:992:4: warning: right shift count >= width of type [enabled > by default] > > Amicalement, I will convert every ide block number to 64 bit for disk and partitions. 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 I hope this won't break anything, it is a big change impacting everybody :( Sincèrement,
Hi Frédéric, On Thu, 13 Jun 2013 15:03:49 +0200, Frédéric Leroy <fredo@starox.org> wrote: > Le 13/06/2013 13:33, Albert ARIBAUD a écrit : > > With gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) this patch causes > > the following warning for all boards: > > > > cmd_ide.c:992:4: warning: right shift count >= width of type [enabled > > by default] > > > > Amicalement, > > I will convert every ide block number to 64 bit for disk and partitions. Be careful that some struct fields representing sector / block number might be 32-bit for an external reason, e.g. in partition tables. > 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? > I hope this won't break anything, it is a big change impacting everybody :( It would affect everybody but within a well-delimited feature, which is disk access. Tests on a few targets with disks of various sizes should be enough. > Sincèrement, Amicalement,
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.
Frédéric Leroy <fredo@starox.org> writes: > I will convert every ide block number to 64 bit for disk and partitions. > I guess CONFIG_LBA48 is also broken in common/cmd_ide.c : FWIW, I have a patch pending for this already. But it's necessarily pretty invasive and I'm not even sure yet that I've found all places that need to be adapted. It works fine on CuBox Pro and builds without warnings for all ARM boards and sandbox (or at least MAKEALL succeeds with -Werror added to a few places). Not sure whether I'll get around to working on it this weekend, but I'll try to at least post the patch tomorrow so others can test it. Sascha
diff --git a/include/configs/lacie_kw.h b/include/configs/lacie_kw.h index 09b5798..847afcd 100644 --- a/include/configs/lacie_kw.h +++ b/include/configs/lacie_kw.h @@ -111,6 +111,7 @@ #define CONFIG_ENV_SPI_MAX_HZ 20000000 /* 20Mhz */ #define CONFIG_SYS_IDE_MAXBUS 1 #define CONFIG_SYS_IDE_MAXDEVICE 1 +#define CONFIG_SYS_64BIT_LBA /* Allow disk > 2.1TB */ #if defined(CONFIG_D2NET_V2) #define CONFIG_SYS_PROMPT "d2v2> " #elif defined(CONFIG_NET2BIG_V2)
From: Frédéric Leroy <fredo@starox.org> For big disk support, we need LBA addressing on 64 bits --- include/configs/lacie_kw.h | 1 + 1 file changed, 1 insertion(+)