Remove legacy kernel load patch - no longer required
SVN-Revision: 13679
This commit is contained in:
		| @@ -1,187 +0,0 @@ | ||||
| Hack to load PS3 legacy kernels (2.6.16 and fc7 installer) with the 2.6.23 | ||||
| mainline linux kernel. | ||||
|  | ||||
| --- | ||||
|  kexec/arch/ppc64/fs2dt.c           |   47 +++++++++++++++++++++++++++++++++++++ | ||||
|  kexec/arch/ppc64/kexec-elf-ppc64.c |   44 ++++++++++++++++++++++++++++++++++ | ||||
|  kexec/arch/ppc64/kexec-ppc64.c     |    5 +++ | ||||
|  kexec/arch/ppc64/kexec-ppc64.h     |    2 + | ||||
|  4 files changed, 98 insertions(+) | ||||
|  | ||||
| --- a/kexec/arch/ppc64/fs2dt.c | ||||
| +++ b/kexec/arch/ppc64/fs2dt.c | ||||
| @@ -262,6 +262,33 @@ static void putprops(char *fn, struct di | ||||
|  			die("unrecoverable error: could not read \"%s\": %s\n", | ||||
|  			    pathname, strerror(errno)); | ||||
|   | ||||
| +		/* ps3 legacy - Add 'PS3PF' to compatible */ | ||||
| + | ||||
| +		if (ps3_legacy && !strcmp(dp->d_name, "compatible")) { | ||||
| +			static const char s[] = "PS3PF"; | ||||
| +			char *const tmp = (char *)dt + len; | ||||
| + | ||||
| +			memcpy(tmp, s, sizeof(s)); | ||||
| +			len += sizeof(s); | ||||
| +			*dt_len = len; | ||||
| + | ||||
| +			fprintf(stdout, "ps3 legacy: Changed dt entry " | ||||
| +				"/compatible: <%s> -> <%s %s>\n", | ||||
| +				(char *)dt, (char *)dt, tmp); | ||||
| +		} | ||||
| + | ||||
| +		/* ps3 legacy - force memory.reg to 224 MiB */ | ||||
| + | ||||
| +		if (ps3_legacy && !strcmp(dp->d_name, "reg") && len == 16) { | ||||
| +			uint64_t tmp = *((uint64_t *)dt + 1); | ||||
| + | ||||
| +			*((uint64_t *)dt + 1) = 0xe000000ULL; | ||||
| +			fprintf(stdout, "ps3 legacy: Changed dt entry " | ||||
| +				"/memory/reg: <%llx> -> <%llx>\n", | ||||
| +				(unsigned long long)tmp, | ||||
| +				*((unsigned long long *)dt + 1)); | ||||
| +		} | ||||
| + | ||||
|  		checkprop(fn, dt, len); | ||||
|   | ||||
|  		dt += (len + 3)/4; | ||||
| @@ -360,6 +387,26 @@ static void putnode(void) | ||||
|  		reserve(initrd_base, initrd_size); | ||||
|  	} | ||||
|   | ||||
| +	/* ps3 legacy - add entry linux,platform <801> */ | ||||
| + | ||||
| +	if (ps3_legacy && !strcmp(basename,"/chosen/")) { | ||||
| +		int len = 4; | ||||
| +		static const uint32_t data = 0x801UL; | ||||
| + | ||||
| +		*dt++ = 3; | ||||
| +		*dt++ = len; | ||||
| +		*dt++ = propnum("linux,platform"); | ||||
| + | ||||
| +		if ((len >= 8) && ((unsigned long)dt & 0x4)) | ||||
| +			dt++; | ||||
| + | ||||
| +		memcpy(dt,&data,len); | ||||
| +		dt += (len + 3)/4; | ||||
| + | ||||
| +		fprintf(stdout, "ps3 legacy: Added dt entry " | ||||
| +			"/chosen/linux,platform = <801>\n"); | ||||
| +	} | ||||
| + | ||||
|  	/* Add cmdline to the second kernel.  Check to see if the new | ||||
|  	 * cmdline has a root=.  If not, use the old root= cmdline.  */ | ||||
|  	if (!strcmp(basename,"/chosen/")) { | ||||
| --- a/kexec/arch/ppc64/kexec-elf-ppc64.c | ||||
| +++ b/kexec/arch/ppc64/kexec-elf-ppc64.c | ||||
| @@ -45,6 +45,7 @@ | ||||
|  uint64_t initrd_base, initrd_size; | ||||
|  unsigned char reuse_initrd = 0; | ||||
|  const char *ramdisk; | ||||
| +int ps3_legacy = -1; /* default to probe */ | ||||
|   | ||||
|  int create_flatten_tree(struct kexec_info *, unsigned char **, unsigned long *, | ||||
|  			char *); | ||||
| @@ -76,6 +77,33 @@ void arch_reuse_initrd(void) | ||||
|  	reuse_initrd = 1; | ||||
|  } | ||||
|   | ||||
| +/** | ||||
| + * ps3_legacy_probe - Probe kernel version. | ||||
| + */ | ||||
| + | ||||
| +static int ps3_legacy_probe(const char *p, off_t len) | ||||
| +{ | ||||
| +	static const char d1[] = "linux,platform";    /* legacy 2.6.16 */ | ||||
| +	static const char d2[] = "2.6.21-1.3194.fc7"; /* fedora 7 installer */ | ||||
| +	const char *const end = p + len - sizeof(d2); | ||||
| + | ||||
| +	while(p < end) { | ||||
| +		if (p[0] == d1[0] && !memcmp(p, d1, sizeof(d1) - 1)) { | ||||
| +			fprintf(stdout, "ps3 legacy: Legacy kernel found: " | ||||
| +				"'%s'\n", d1); | ||||
| +			break; | ||||
| +		} | ||||
| +		if (p[0] == d2[0] && !memcmp(p, d2, sizeof(d2) - 1)) { | ||||
| +			fprintf(stdout, "ps3 legacy: Legacy kernel found: " | ||||
| +				"'%s'\n", d2); | ||||
| +			break; | ||||
| +		} | ||||
| +		p++; | ||||
| +	} | ||||
| + | ||||
| +	return (p != end); | ||||
| +} | ||||
| + | ||||
|  int elf_ppc64_load(int argc, char **argv, const char *buf, off_t len, | ||||
|  			struct kexec_info *info) | ||||
|  { | ||||
| @@ -102,6 +130,8 @@ int elf_ppc64_load(int argc, char **argv | ||||
|  #define OPT_RAMDISK     (OPT_ARCH_MAX+1) | ||||
|  #define OPT_DEVICETREEBLOB     (OPT_ARCH_MAX+2) | ||||
|  #define OPT_ARGS_IGNORE		(OPT_ARCH_MAX+3) | ||||
| +#define OPT_PS3_LEGACY (OPT_ARCH_MAX+4) | ||||
| +#define OPT_PS3_LEGACY_NO (OPT_ARCH_MAX+5) | ||||
|   | ||||
|  	static const struct option options[] = { | ||||
|  		KEXEC_ARCH_OPTIONS | ||||
| @@ -111,6 +141,8 @@ int elf_ppc64_load(int argc, char **argv | ||||
|  		{ "initrd",             1, NULL, OPT_RAMDISK }, | ||||
|  		{ "devicetreeblob",     1, NULL, OPT_DEVICETREEBLOB }, | ||||
|  		{ "args-linux",		0, NULL, OPT_ARGS_IGNORE }, | ||||
| +		{ "ps3-legacy",         0, NULL, OPT_PS3_LEGACY }, | ||||
| +		{ "ps3-no-legacy",      0, NULL, OPT_PS3_LEGACY_NO }, | ||||
|  		{ 0,                    0, NULL, 0 }, | ||||
|  	}; | ||||
|   | ||||
| @@ -146,9 +178,18 @@ int elf_ppc64_load(int argc, char **argv | ||||
|  			break; | ||||
|  		case OPT_ARGS_IGNORE: | ||||
|  			break; | ||||
| +		case OPT_PS3_LEGACY: | ||||
| +			ps3_legacy = 1; | ||||
| +			break; | ||||
| +		case OPT_PS3_LEGACY_NO: | ||||
| +			ps3_legacy = 0; | ||||
| +			break; | ||||
|  		} | ||||
|  	} | ||||
|   | ||||
| +	if (ps3_legacy == -1) | ||||
| +		ps3_legacy = ps3_legacy_probe(buf, len); | ||||
| + | ||||
|  	cmdline_len = 0; | ||||
|  	if (cmdline) | ||||
|  		cmdline_len = strlen(cmdline) + 1; | ||||
| @@ -158,6 +199,9 @@ int elf_ppc64_load(int argc, char **argv | ||||
|  	if (ramdisk && reuse_initrd) | ||||
|  		die("Can't specify --ramdisk or --initrd with --reuseinitrd\n"); | ||||
|   | ||||
| +	if (ps3_legacy && devicetreeblob) | ||||
| +		die("Can't specify --devicetreeblob with --ps3-legacy\n"); | ||||
| + | ||||
|  	setup_memory_ranges(info->kexec_flags); | ||||
|   | ||||
|  	/* Need to append some command line parameters internally in case of | ||||
| --- a/kexec/arch/ppc64/kexec-ppc64.c | ||||
| +++ b/kexec/arch/ppc64/kexec-ppc64.c | ||||
| @@ -650,6 +650,11 @@ void arch_usage(void) | ||||
|  	fprintf(stderr, "     --initrd=<filename> same as --ramdisk.\n"); | ||||
|  	fprintf(stderr, "     --devicetreeblob=<filename> Specify device tree blob file.\n"); | ||||
|  	fprintf(stderr, "     --elf64-core-headers Prepare core headers in ELF64 format\n"); | ||||
| +	fprintf(stderr, "     --ps3-legacy    Make fixups needed to boot PS3 legacy kernels.\n"); | ||||
| +	fprintf(stderr, "                     The default is to probe the kernel type.\n"); | ||||
| +	fprintf(stderr, "     --ps3-no-legacy Do not make fixups needed to boot PS3 legacy\n"); | ||||
| +	fprintf(stderr, "                     kernels. The default is to probe the kernel\n"); | ||||
| +	fprintf(stderr, "                     type.\n"); | ||||
|  } | ||||
|   | ||||
|  struct arch_options_t arch_options = { | ||||
| --- a/kexec/arch/ppc64/kexec-ppc64.h | ||||
| +++ b/kexec/arch/ppc64/kexec-ppc64.h | ||||
| @@ -41,4 +41,6 @@ typedef struct mem_rgns { | ||||
|   | ||||
|  extern mem_rgns_t usablemem_rgns; | ||||
|   | ||||
| +extern int ps3_legacy; | ||||
| + | ||||
|  #endif /* KEXEC_PPC64_H */ | ||||
		Reference in New Issue
	
	Block a user
	 Hamish Guthrie
					Hamish Guthrie