예제 #1
0
void probe_idregs_fintek(uint16_t port)
{
	uint16_t vid, did;

	probing_for("Fintek", "", port);

	enter_conf_mode_winbond_fintek_ite_8787(port);

	did = regval(port, DEVICE_ID_BYTE1_REG);
	did |= (regval(port, DEVICE_ID_BYTE2_REG) << 8);

	vid = regval(port, VENDOR_ID_BYTE1_REG);
	vid |= (regval(port, VENDOR_ID_BYTE2_REG) << 8);

	if (vid != FINTEK_VENDOR_ID || superio_unknown(reg_table, did)) {
		if (verbose)
			printf(NOTFOUND "vid=0x%04x, id=0x%04x\n", vid, did);
		exit_conf_mode_winbond_fintek_ite_8787(port);
		return;
	}

	printf("Found Fintek %s (vid=0x%04x, id=0x%04x) at 0x%x\n",
		get_superio_name(reg_table, did), vid, did, port);
	chip_found = 1;

	dump_superio("Fintek", reg_table, port, did, LDN_SEL);

	exit_conf_mode_winbond_fintek_ite_8787(port);
}
예제 #2
0
void probe_idregs_nuvoton(uint16_t port)
{
	uint8_t sid, srid;
	uint16_t chip_id = 0;
	uint8_t chip_rev = 0;
	uint16_t iobase = 0;
	int i;

	/* Probe for the 16bit IDs first to avoid collisions */
	probing_for("Nuvoton", "", port);
	enter_conf_mode_winbond_fintek_ite_8787(port);
	chip_id = (regval(port, DEVICE_ID_REG) << 8) |
	      regval(port, DEVICE_ID_REG + 1);
	regwrite(port, LDN_SEL, 0x0b);
	iobase = (regval(port, 0x60) << 8) | (regval(port, 0x61) & ~7);

	exit_conf_mode_winbond_fintek_ite_8787(port);

	if (!superio_unknown(reg_table, chip_id)) {
		printf("Found Nuvoton %s (id=0x%02x) at 0x%x\n",
		       get_superio_name(reg_table, chip_id), chip_id, port);
		chip_found = 1;
		enter_conf_mode_winbond_fintek_ite_8787(port);
		dump_superio("Nuvoton", reg_table, port, chip_id, LDN_SEL);
		exit_conf_mode_winbond_fintek_ite_8787(port);
		goto extra;
	}

	if (verbose)
		printf(NOTFOUND "chip_id=0x%04x\n", chip_id);

	probing_for("Nuvoton", "(sid=0xfc) ", port);

	sid = regval(port, DEVICE_ID_REG);
	srid = regval(port, DEVICE_REV_REG);

	if (sid == 0xfc) {	/* WPCE775xL family */
		/*
		 * bits 7-5: Chip ID
		 * bits 4-0: Chip revision
		 */
		chip_id = srid >> 5;
		chip_rev = srid & 0x1f;
	}
예제 #3
0
void probe_idregs_fintek(uint16_t port)
{
	uint16_t vid, did, hwmport;

	probing_for("Fintek", "", port);

	enter_conf_mode_winbond_fintek_ite_8787(port);

	did = regval(port, DEVICE_ID_BYTE1_REG);
	did |= (regval(port, DEVICE_ID_BYTE2_REG) << 8);

	vid = regval(port, VENDOR_ID_BYTE1_REG);
	vid |= (regval(port, VENDOR_ID_BYTE2_REG) << 8);

	if (vid != FINTEK_VENDOR_ID || superio_unknown(reg_table, did)) {
		if (verbose)
			printf(NOTFOUND "vid=0x%04x, id=0x%04x\n", vid, did);
		exit_conf_mode_winbond_fintek_ite_8787(port);
		return;
	}

	printf("Found Fintek %s (vid=0x%04x, id=0x%04x) at 0x%x\n",
		get_superio_name(reg_table, did), vid, did, port);
	chip_found = 1;

	dump_superio("Fintek", reg_table, port, did, LDN_SEL);

	if (extra_dump) {
		regwrite(port, LDN_SEL, 0x04);	 /* Select LDN 4 (HWM). */

		/* Get HWM base address (stored in LDN 4, index 0x60/0x61). */
		hwmport = regval(port, 0x60) << 8;
		hwmport |= regval(port, 0x61);

		printf("Hardware monitor (0x%04x)\n", hwmport);
		dump_superio("Fintek-HWM", hwm_table, hwmport, did, LDN_SEL);
	}

	exit_conf_mode_winbond_fintek_ite_8787(port);
}
예제 #4
0
void probe_idregs_ite(uint16_t port)
{
	chip_found_at_port = 0;

	if (port == 0x3f0 || port == 0x3bd || port == 0x370) {
		enter_conf_mode_ite_legacy(port, initkey_it8661f);
		probe_idregs_ite_helper("(init=legacy/it8661f) ", port);
		exit_conf_mode_ite(port);
		if (chip_found_at_port)
			return;

		enter_conf_mode_ite_legacy(port, initkey_it8671f);
		probe_idregs_ite_helper("(init=legacy/it8671f) ", port);
		exit_conf_mode_ite(port);
		if (chip_found_at_port)
			return;
	} else {
		enter_conf_mode_ite(port);
		probe_idregs_ite_helper("(init=standard) ", port);
		exit_conf_mode_ite(port);
		if (chip_found_at_port)
			return;

		enter_conf_mode_ite_it8502e(port);
		probe_idregs_ite_helper("(init=it8502e) ", port);
		exit_conf_mode_ite(port);
		if (chip_found_at_port)
			return;

		enter_conf_mode_ite_it8761e(port);
		probe_idregs_ite_helper("(init=it8761e) ", port);
		exit_conf_mode_ite(port);
		if (chip_found_at_port)
			return;

		enter_conf_mode_ite_it8228e(port);
		probe_idregs_ite_helper("(init=it8228e) ", port);
		exit_conf_mode_ite(port);
		if (chip_found_at_port)
			return;

		enter_conf_mode_winbond_fintek_ite_8787(port);
		probe_idregs_ite_helper("(init=0x87,0x87) ", port);
		exit_conf_mode_winbond_fintek_ite_8787(port);
		if (chip_found_at_port)
			return;
	}
}