LINUX.ORG.RU

Intel i350: как подергать за gpio

 , ,


0

1

Есть сетевая карта Intel i350:

04:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
	Flags: bus master, fast devsel, latency 0, IRQ 17
	Memory at df600000 (32-bit, non-prefetchable) [size=128K]
	I/O ports at e000 [size=32]
	Memory at df640000 (32-bit, non-prefetchable) [size=16K]
	Capabilities: [40] Power Management version 3
	Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
	Capabilities: [70] MSI-X: Enable+ Count=10 Masked-
	Capabilities: [a0] Express Endpoint, MSI 00
	Capabilities: [100] Advanced Error Reporting
	Capabilities: [140] Device Serial Number 00-90-0b-ff-ff-5e-0a-a5
	Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
	Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
	Capabilities: [1a0] Transaction Processing Hints
	Capabilities: [1d0] Access Control Services
	Kernel driver in use: igb
	Kernel modules: igb

https://www.intel.com/content/www/us/en/embedded/products/networking/ethernet...

У неё есть GPIO выходы, к которым припаяли лампочку.

Мне хочется программно управлять этими выходами.

В спеке в разделе 1.4.8 указано, что есть Software definable pins и ими можно рулить через eeprom

Наверное мне надо научиться изменять eeprom что бы добраться до этих пинов через /sys/gpio?

Прям-таки лампочку? Накаливания? Или всё же светодиод

Harald ★★★★★
()

берешь исходники модуля и ищешь. с большой вероятностью этот кправление этим индикатором наружу не вытаскивали. просто где-то внутри самим дравером управляется.

pfg ★★★★★
()

Купи usb gpio для компа и не порть технику.

anonymous
()

вангую что тебе надо будет влезть в драйвер сетевухи, реализовать в ней gpio контроллер(это несложно) и по обращениям к gpio контроллеру из userspace, писать нужное в MII регистр согласно документации.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Dark_SavanT

А не, не так, там надо в eeprom записать конфигурацию кто есть ввод, кто вывод и дальше шатать pci регистр, что даже проще.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Dark_SavanT

я вроде примерно понял, куда смотреть в плане eeprom (вроде даже можно из юзерленда), но можешь ли подсказать, что такое «шатать pci регистр» и куда смотреть?

max_lapshin ★★★★★
() автор топика
Ответ на: комментарий от max_lapshin

Это надо в даташит вкуриваться чтобы понять в какую именно область памяти устройства писать/читать чтобы получить состояние.

«The use, direction, and values of SDP pins are controlled and accessed using fields in the Device Control (CTRL) register and Extended Device Control (CTRL_EXT) register» стр.103

А дальше смотри раздел 8.2 там в описании регистров написано какие биты дёргать для чего.

---

Да, я ошибся, там в драйвере скорее всего будет функция типа записать/прочитать регистр, руками в память лазить не надо.

Dark_SavanT ★★★★★
()
Последнее исправление: Dark_SavanT (всего исправлений: 1)
Ответ на: комментарий от Dark_SavanT

а по ходу, eeprom вообще не нужен, в нём только дефолтное значение направления пинов.

Нужно просто дергать за биты в 8.2.3 в рантайме, мне не нужно сохранять настройки в память карты.

Спасибо!

max_lapshin ★★★★★
() автор топика
Ответ на: комментарий от Dark_SavanT

вот жеж какая дрянь: управление регистром CTRL_EXT есть только для конкретных бит, а не для произвольных =(

max_lapshin ★★★★★
() автор топика
Ответ на: комментарий от max_lapshin

вроде что-то уже напрогано в mainline. Надо разобраться, куда это ведет дальше. там доступ через регистры в памяти

Точно не уверен, но похоже, что в драйвере эти пины (SDP) принудительно конфигурируются для PTP (IEEE 1588).

1.4.8 Software-Definable Pins (SDP) Interface (General-Purpose I/O)

The I350 has four software-defined pins (SDP pins) per port that can be used for IEEE1588 auxiliary device connections, control of the SFP optical module interface, passing thermal sensor limit indication and other miscellaneous hardware or software-control purposes. These pins can be individually configurable to act as either standard inputs, general-purpose interrupt (GPI) inputs or output pins. The default direction of each pin is configurable via the EEPROM (refer to Section 6.2.21, Section 8.2.1 and Section 8.2.3), as well as the default value of all pins configured as outputs. Information on SDP usage can be found in Section 3.4 and Section 7.9.4. Refer to Section 2.3.5 for pin description of this interface.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

Точно не уверен, но похоже, что в драйвере эти пины (SDP) принудительно конфигурируются для PTP (IEEE 1588).

В свете этого есть мысль посмотреть на проекты типа linuxptp, которые могут дать возможность как-то управлять этими пинами. Вот, например, в Linux Kernel есть программа testptp, в которой есть такое (копирую из кода):

"usage: %s [options]"
...

		" -l         list the current pin configuration"
		" -L pin,val configure pin index 'pin' with function 'val'"
		"            the channel index is taken from the '-i' option"
		"            'val' specifies the auxiliary function:"
		"            0 - none\n"
		"            1 - external time stamp"
		"            2 - periodic output"
		" -p val     enable output with a period of 'val' nanoseconds"

Я так понимаю, что эти пины появятся где-то здесь. Интересно, что у тебя там?

What:		/sys/class/ptp/ptpN/pins
Date:		March 2014
Contact:	Richard Cochran <richardcochran@gmail.com>
Description:
		This directory contains one file for each programmable
		pin offered by the PTP hardware clock. The file name
		is the hardware dependent pin name. Reading from this
		file produces two numbers, the assigned function (see
		the PTP_PF_ enumeration values in linux/ptp_clock.h)
		and the channel number. The function and channel
		assignment may be changed by two writing numbers into
		the file.

Пока мысль такая: раз уж они используют это для PHC, то глянуть, а нельзя ли через всякие программы для PTP добраться до пинов и как-то их включить, если там такое можно.

Zubok ★★★★★
()
Ответ на: комментарий от max_lapshin

Увидишь что-то такое (у меня этого железа нет, поэтому копирую из инета):

https://sourceforge.net/p/linuxptp/mailman/message/34767583/

I think igb is working just fine:

# testptp -l
name SDP0 index 0 func 0 chan 0
name SDP1 index 1 func 0 chan 0
name SDP2 index 2 func 0 chan 0
name SDP3 index 3 func 0 chan 0

Вот они и есть - SDP.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Пока мысль такая: раз уж они используют это для PHC, то глянуть, а нельзя ли через всякие программы для PTP добраться до пинов и как-то их включить, если там такое можно

В PTP такие пины чаще всего используются или как output для генерации Pulse-per-second signal или как input для заморозки timestamp'а какого-либо event'а, в обоих случаях использовать их для каких-то еще своих целей вряд ли получится

alx777 ★★
()
Ответ на: комментарий от Zubok

Вариант может быть такой: попробовать включить функцию periodic output (func=2)на с большим периодом (чуть ли не до второго пришествия). Период вроде как отдельно выставляется. Тогда, может быть, пин сразу включится и будет ждать, когда не истечет период (лампочка зажглась). А потом подать функцию none (func=0) и тогда лампочка выключатеся. Это я умозрительно.

Zubok ★★★★★
()
Ответ на: комментарий от alx777

ну так, может, как раз и включить их на большой период и выключить. Ему же не нужны как входы (так написано в топике). Он написал, что лампочку припаяли. Эту функциональность от SDP можно оторвать, насколько я понял, только перекомпиляцией, отключив опцию. run-time опции в modinfo я не вижу. При этом еще не факт, что SDP появятся как GPIO.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 4)
Ответ на: комментарий от Zubok

ну так, может, как раз и включить их на большой период и выключить

PPS обычно выглядит как импульс длиной сколько-нибудь микросекунд раз в секунду

Хотя если там есть возможность регулировать частоту, то можно наверное что-то вроде Pulse Width Modulation реализовать

alx777 ★★
()
Ответ на: комментарий от alx777

Ну вот как бы в tesptp есть:

-p val enable output with a period of 'val' nanoseconds"

Только не ясно, он сначала выключенным будет и ждать истечения, а потом включится или сразу включится и будет ждать. по смыслу я понял, что enable - включится. Или это просто указание периода.

А можно, да. прямо ШИМ сделать, то есть короткими импульсами.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

Можно через /sys, если такое есть и это не устарело.

What:		/sys/class/ptp/ptpN/period
Date:		September 2010
Contact:	Richard Cochran <richardcochran@gmail.com>
Description:
		This write-only file enables or disables periodic
		outputs. To enable a periodic output, write five
		integers into the file: channel index, start time
		seconds, start time nanoseconds, period seconds, and
		period nanoseconds. To disable a periodic output, set
		all the seconds and nanoseconds values to zero.

Zubok ★★★★★
()
Ответ на: комментарий от max_lapshin

Только вы там как лампочку цепляете? Даташит посмотрели, что это за выходы и какую нагрузку на них можно вешать? Резистор, может, нужен? И вообще какое на них напряжение. Возможно даже, что они не напрямую к микросхеме подключены, а через некий преобразователь уровня или ключи какие-то (тогда это в спецификации на плату должно быть написано, а не на чип).

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

Резистор, может, нужен?

Без резистора на хотябы 500ом я думаю пытаться зажечь светодиод быть наивным.

burato ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.